繁体   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