有谁能告诉我如何在MySQL数据库中插入特殊字符?我已经制作了一个PHP脚本,意在将一些单词插入到数据库中,但如果单词包含'那么它就不会被插入。
我可以在使用PHPmyAdmin时插入特殊字符,但是当它通过PHP插入时它不起作用。可能是PHP正在将特殊字符更改为其他内容吗?如果是这样,有没有办法让它们正确插入?
答案 0 :(得分:27)
$insert_data = mysql_real_escape_string($input_data);
假设您将数据存储为$input_data
答案 1 :(得分:9)
你逃跑了吗?尝试使用mysql_real_escape_string()函数,它将处理特殊字符。
答案 2 :(得分:6)
使用 mysql_real_escape_string
那么 mysql_real_escape_string 做什么?
此PHP库函数将反斜杠添加到以下字符:\ n,\ r,\,\ x00,\ x1a,'和“。重要的是,单引号和双引号都被转义,因为这些是最容易打开漏洞的字符。
请告知自己有关sql_injection的信息。您可以使用此link作为开头
答案 3 :(得分:5)
您最有可能转义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()
为您处理此事。
答案 4 :(得分:5)
您可能直接将它们粘贴到查询中。根据您使用的扩展程序,您应该使用适当的函数“mysql_real_escape_string,mysqli_real_escape_string或PDO::quote来”逃避“它们。
答案 5 :(得分:3)
请注意,正如其他人指出的那样,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 ''=''
即。安全检查完全被绕过。
下进行。
答案 6 :(得分:2)
可能“mysql_real_escape_string()
”适用于你
答案 7 :(得分:0)
$var = mysql_real_escape_string("data & the base");
$result = mysql_query('SELECT * FROM php_bugs WHERE php_bugs_category like "%' .$var.'%"');
答案 8 :(得分:0)
使用此:htmlentities($_POST['field']);
仅够。这适用于特殊字符:
用于CI htmlentities($this->input->post('control_name'));
答案 9 :(得分:0)
例如:
$ 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框架。找到你的框架&实施OR
核心PHP中的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
答案 10 :(得分:0)
htmlspecialchars函数是最好的解决方案伙伴。今天我正在寻找如何插入带有特殊字符的字符串,以及Google抛出了如此多的Stackoverflow列表。没有一个为我提供了解决方案。我在w3schools页面中找到了它。是的,我可以通过使用以下函数来解决我的问题:
d = {'MANHATTAN':1, 'BROOKLYN':2, 'QUEENS' : 3, 'STATEN ISLAND' : 4, 'BRONX' : 5}
pat = '(' + '|'.join(d.keys()) + ')'
df['code'] = df['zone'].str.extract(pat, expand=False).map(d).fillna(0, downcast='int')
print (df.head(10))
zone code
0 BROOKLYN 2
1 BRONX 5
2 07 BRONX 5
3 Unspecified 0
4 05 BRONX 5
5 QUEENS 3
6 MANHATTAN 1
7 07 MANHATTAN 1
8 STATEN ISLAND 4
9 17 BROOKLYN 2
答案 11 :(得分:0)
我将其放在此处以供将来参考。浪费了20分钟之后,我得到了一个解决方案,可以将特殊字符输入数据库。我们不必像这样使用mysql_real_escape_string($holdvalue)
。我们必须以这种方式做到这一点。 $db->real_escape_string($holdvalue)
。其中$db
是数据库连接详细信息。 $db = mysqli_connect(DB_SERVER, DB_USERNAME, DB_PASSWORD, DB_NAME);
。