[英]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_string 、 mysqli_real_escape_string或PDO::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.