簡體   English   中英

如何將特殊字符插入數據庫?

[英]How to insert special characters into a database?

誰能告訴我如何將特殊字符插入 MySQL 數據庫? 我制作了一個 PHP 腳本,用於將一些單詞插入數據庫,但如果單詞包含 ',則不會插入。

我可以在使用 PHPmyAdmin 時很好地插入特殊字符,但是通過 PHP 插入它們時它不起作用。難道是 PHP 正在將特殊字符更改為其他字符嗎? 如果是這樣,有沒有辦法讓它們正確插入?

$insert_data = mysql_real_escape_string($input_data);

假設您將數據存儲為$input_data

你在逃嗎? 試試 mysql_real_escape_string() 函數,它會處理特殊字符。

您很可能會轉義 SQL 字符串,類似於:

SELECT * FROM `table` WHERE `column` = 'Here's a syntax error!'

您需要轉義引號,如下所示:

SELECT * FROM `table` WHERE `column` = 'Here\'s a syntax error!'

mysql_real_escape_string()為你處理這個。

使用mysql_real_escape_string

那么mysql_real_escape_string 有什么作用呢?

此 PHP 庫函數在以下字符前添加反斜杠:\\n、\\r、\\、\\x00、\\x1a、' 和“。 重要的部分是單引號和雙引號被轉義,因為這些是最有可能打開漏洞的字符。

請自行了解 sql_injection。 您可以使用此鏈接作為開始

您可以將它們直接粘貼到查詢中。 相反,您應該“轉義”它們,使用適當的函數 - mysql_real_escape_stringmysqli_real_escape_stringPDO::quote取決於您使用的擴展名。

請注意,正如其他人指出的 mysql_real_escape_string() 將解決問題(就像addslashes 一樣),但是出於安全原因,您應該始終使用 mysql_real_escape_string() - 考慮:

SELECT * FROM valid_users WHERE username='$user' AND password='$password'

如果瀏覽器發送

user="admin' OR (user=''"
password="') AND ''='"

查詢變為:

SELECT * FROM valid_users 
WHERE username='admin' OR (user='' AND password='') AND ''=''

即安全檢查被完全繞過。

C。

可能“ mysql_real_escape_string() ”對你有用

$var = mysql_real_escape_string("data & the base");
$result = mysql_query('SELECT * FROM php_bugs WHERE php_bugs_category like  "%' .$var.'%"');

使用這個: htmlentities($_POST['field']);

夠了而已。 這是特殊字符:

用於CI htmlentities($this->input->post('control_name'));

例如:
$parent_category_name = 男裝
在這里考慮 SQL 查詢

$sql_category_name = "SELECT c.*, cd.name, cd.category_id  as iid FROM ". DB_PREFIX . "category c LEFT JOIN " . DB_PREFIX . "category_description cd ON (c.category_id = cd.category_id) WHERE cd.name = '" .  $this->db->escape($parent_category_name) . "' AND c.parent_id =0 "; 

錯誤:

Static analysis:

1 errors were found during analysis.

Ending quote ' was expected. (near "" at position 198)
SQL query: Documentation

SELECT c.*, cd.name, cd.category_id as iid FROM oc_category c LEFT JOIN oc_category_description cd ON (c.category_id = cd.category_id) WHERE cd.name = 'Men's Clothing' AND c.parent_id =0 LIMIT 0, 25

MySQL said: Documentation

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 's Clothing' AND c.parent_id =0 LIMIT 0, 25' at line 1

嘗試實現:

$this->db->escape($parent_category_name)

上述方法適用於 OpenCart 框架。 找到你的框架並在 Core PHP 中實現 OR mysql_real_escape_string()

這將成為男裝,即,就我而言

$sql_category_name = "SELECT c.*, cd.name, cd.category_id  as iid FROM ". DB_PREFIX . "category c LEFT JOIN " . DB_PREFIX . "category_description cd ON (c.category_id = cd.category_id) WHERE cd.name = '" .  $this->db->escape($parent_category_name) . "' AND c.parent_id =0 "; 

因此,您將通過將 escape() 實現為

SELECT c.*, cd.name, cd.category_id as iid FROM oc_category c LEFT JOIN oc_category_description cd ON (c.category_id = cd.category_id) WHERE cd.name = 'Men\'s Clothing' AND c.parent_id =0

htmlspecialchars 函數是最好的解決方案。 今天我正在尋找如何插入帶有特殊字符的字符串,谷歌拋出了這么多 Stackoverflow 列表。他們都沒有給我提供解決方案。 我在 w3schools 頁面中找到了它。 是的,我可以像這樣使用這個函數來解決我的問題:

$abc = $POST['xyz'];

$abc = htmlspecialchars($abc);

我把它放在這里以備將來參考。 浪費了 20 分鍾后,我得到了一個將特殊字符放入數據庫的解決方案。 我們不必像那樣使用mysql_real_escape_string($holdvalue) 我們必須這樣做。 $db->real_escape_string($holdvalue) 其中$db是數據庫連接詳細信息。 $db = mysqli_connect(DB_SERVER, DB_USERNAME, DB_PASSWORD, DB_NAME); .

$insert_data = addslashes($_POST['用戶名']);

你可以使用這個方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM