Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在数据库中插入特殊字符?_Php_Mysql_Database_Insert_Special Characters - Fatal编程技术网

Php 如何在数据库中插入特殊字符?

Php 如何在数据库中插入特殊字符?,php,mysql,database,insert,special-characters,Php,Mysql,Database,Insert,Special Characters,有人能告诉我如何在MySQL数据库中插入特殊字符吗?我制作了一个PHP脚本,用于将一些单词插入到数据库中,但如果该单词包含一个“则不会插入” 在使用PHPmyAdmin时,我可以很好地插入特殊字符,但在通过PHP插入字符时,它就是不起作用。是否PHP正在将特殊字符转换为其他字符?如果是,有没有办法让它们正确插入 你在逃跑吗?尝试mysql\u real\u escape\u string()函数,它将处理特殊字符 $insert_data = mysql_real_escape_string($

有人能告诉我如何在MySQL数据库中插入特殊字符吗?我制作了一个PHP脚本,用于将一些单词插入到数据库中,但如果该单词包含一个“则不会插入”


在使用PHPmyAdmin时,我可以很好地插入特殊字符,但在通过PHP插入字符时,它就是不起作用。是否PHP正在将特殊字符转换为其他字符?如果是,有没有办法让它们正确插入

你在逃跑吗?尝试mysql\u real\u escape\u string()函数,它将处理特殊字符

$insert_data = mysql_real_escape_string($input_data);

假设您将数据存储为
$input\u data

可能“
mysql\u real\u escape\u string()
”将适用于u

,您很可能正在转义SQL字符串,类似于:

SELECT * FROM `table` WHERE `column` = 'Here's a syntax error!'
您需要转义引号,如下所示:

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

为您处理此问题。

使用mysql\u real\u escape\u string

那么mysql\u real\u escape\u string做什么呢

此PHP库函数将反斜杠前置到以下字符:\n、\r、\、\x00、\x1a、'和'。重要的是,单引号和双引号将被转义,因为这些字符最有可能打开漏洞


请告知您自己有关sql\u注入的信息。您可以以此为起点,将它们直接粘贴到查询中。因此,您应该使用适当的函数或根据您使用的扩展来“转义”它们。

注意,正如其他人指出的,mysql\u real\u escape\u string()将解决此问题(就像addslashes一样),但是出于安全原因,您应该始终使用mysql\u real\u escape\u 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 ''=''
i、 e.完全绕过安全检查


C.

使用这个:
htmlentities($\u POST['field']);

仅此而已。这适用于特殊角色:


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

例如:
$parent\u category\u 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框架。查找您的框架并实现或 核心PHP中的mysql\u real\u escape\u 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()实现为


htmlspecialchars函数是最好的解决方案。今天我在搜索如何插入带有特殊字符的字符串,google抛出了这么多Stackoverflow列表。他们都没有为我提供解决方案。我在w3schools页面中找到了它。是的,我可以像这样使用此函数来解决我的问题:

$abc = $POST['xyz'];

$abc = htmlspecialchars($abc);

我把它放在这里以备将来参考。在浪费了20分钟之后,我找到了一个将特殊字符放入数据库的解决方案。我们不必像那样使用
mysql\u real\u escape\u字符串($holdvalue)
。我们必须这样做。
$db->real\u escape\u字符串($holdvalue)
.Where
$db
是数据库连接的详细信息。
$db=mysqli_connect(db_服务器,db_用户名,db_密码,db_名称);

你能粘贴处理和插入特定变量的代码部分吗?又是一篇作者毫无线索的愚蠢文章。关于drop tables的老故事也是一样(是的,吓唬新手很好,但从来都不起作用),同样的愚蠢的查询功能,可以处理神奇的引号。和往常一样,没有一个关于非字符串值的词。还有$badWords everok的最大保护,这不是最好的文章,但它应该熟悉基本知识(我是从快速的谷歌搜索中找到的)如果你有更好的文章,你可以给它一个链接。我写了一些,它是SO答案的形式。这会教我不要写一个简单的一行的例子。我知道!当我看到你击败我时,我几乎删除了我的答案。这个函数从PHP5.5开始将被弃用。你应该使用
mysqli_real_escape_string
。+1来击败我我发现当我使用反勾号格式化内联代码时,我得到了更多的选票,如果这有帮助的话。因为你先回答了,但没有给出一个例子。好像这是一个用PHP无法更快回答的问题。net@dscher谢谢!要是有更多像你这样的人就好了!;)@两年后的zaf,我想道歉。:P当时我很笨,对PHP完全不了解。当我看到Anthony的答案和一个代码示例时,我立即将其作为答案检查,甚至没有看你的答案,因为它需要更少的努力。我现在更清楚了,所以再次抱歉。:)@乔伊·莫拉尼:没关系,谢谢你的留言。你不再是noob了。这是一个处理php mysql中特殊字符的工作示例。你可以用“它会工作得很好”来替换
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
$abc = $POST['xyz'];

$abc = htmlspecialchars($abc);