0

问题是,每当我以我的 php 页面的形式输入一个大文本并尝试INSERT通过 SQL 查询到数据库中时,它都会给我一个这样的错误:

“您的 SQL 语法有错误;请查看与您的 MySQL 服务器版本相对应的手册,以了解在“示例标题”附近使用正确的语法,“在雨季的漫长几个月里关在一个小房间里”在第 1 行"

查询是这样的:

$sql = "INSERT INTO `d` (`user_id`, `title`, `message`) VALUES ($user_id, '$topic', '$message')";

有趣的是,当我手动插入值并在 phpmyadmin 中运行查询时,它没有给我任何错误。

4

2 回答 2

2

我敢打赌,字符串中有单引号( ' )。$topic在您的 INSERT 中使用它之前先转义。

于 2012-08-11T19:02:49.823 回答
1

使用准备好的语句:

$db = new PDO(...);
$stmt = $db.prepare("INSERT INTO `d` (`user_id`, `title`, `message`) VALUES ($user_id, :topic, :message)");
// I'm assuming that title is a VARCHAR(50) and message is a VARCHAR(500)
$stmt->bindParam(":topic", $topic, PDO::PARAM_STR, 50);
$stmt->bindParam(":message", $topic, PDO::PARAM_STR, 500);
$stmt->execute();

这将转义/正确传递数据的工作直接交给了数据库引擎 - 这是它所属的地方。尽可能避免从用户输入构建 SQL 字符串,这样可以避免许多潜在的 SQL 注入攻击。

于 2012-08-11T19:07:44.130 回答