处理SQL字符串中的引号和命令

时间:2010-01-09 10:26:49

标签: php mysql

在我的MySQL表中,我有一个TEXT类型的列。在我的HTML表单上,用户将文本粘贴到其中可能包含“”,“()等等。如果文本中存在这些字符并且可能导致查询执行崩溃,我想知道如何安全地执行Insert Query。

如何在PHP中正确处理它们?

2 个答案:

答案 0 :(得分:4)

如果您没有使用预准备语句(使用PDOMySqli),则应通过MySql_Real_Escape_String()函数传递用户输入。如果您使用的是MySqli(但未准备好的语句),请MySqli_Real_Escape_String()

但是,我会建议您使用prepared statements,因为您的生活会更轻松,并且您可以免费获得SQL注入保护。

答案 1 :(得分:3)

使用prepared statement

  

准备好的陈述可以帮助增加   通过分离SQL逻辑来实现安全性   提供的数据。这个   逻辑和数据的分离可以提供帮助   防止一种非常常见的类型   漏洞称为SQL注入   攻击。通常在你交易时   使用即席查询,您需要   处理数据时非常小心   您从用户收到的。这个   需要使用逃避的函数   所有必要的麻烦   字符,例如单引号,   双引号和反斜杠   字符。这是不必要的   处理准备好的陈述。该   分离数据允许MySQL   自动考虑这些   字符,他们不需要   使用任何特殊功能逃脱。

一个简单的例子,

$db = new mysqli('localhost', 'username', 'password', 'db');
$stmt = $db->prepare("INSERT INTO mytable (text_column) VALUES (?)");
$stmt->bind_param("s", $mytext); // s = string, b = boolean, i = int, etc
$stmt->execute();
...