在我的MySQL表中,我有一个TEXT类型的列。在我的HTML表单上,用户将文本粘贴到其中可能包含“”,“()等等。如果文本中存在这些字符并且可能导致查询执行崩溃,我想知道如何安全地执行Insert Query。
如何在PHP中正确处理它们?
答案 0 :(得分:4)
如果您没有使用预准备语句(使用PDO或MySqli),则应通过MySql_Real_Escape_String()函数传递用户输入。如果您使用的是MySqli(但未准备好的语句),请MySqli_Real_Escape_String()。
但是,我会建议您使用prepared statements,因为您的生活会更轻松,并且您可以免费获得SQL注入保护。
答案 1 :(得分:3)
准备好的陈述可以帮助增加 通过分离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();
...