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

时间:2010-04-06 10:20:40

标签: php mysql database insert special-characters

有谁能告诉我如何在MySQL数据库中插入特殊字符?我已经制作了一个PHP脚本,意在将一些单词插入到数据库中,但如果单词包含'那么它就不会被插入。

我可以在使用PHPmyAdmin时插入特殊字符,但是当它通过PHP插入时它不起作用。可能是PHP正在将特殊字符更改为其他内容吗?如果是这样,有没有办法让它们正确插入?

12 个答案:

答案 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_stringmysqli_real_escape_stringPDO::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);