在SQL查询中插入非常长的字符串 - 错误

时间:2012-08-11 18:59:41

标签: php mysql string insert long-integer

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

  

“你的SQL语法有错误;请查看与你的MySQL服务器版本相对应的手册,以便在''样本标题'附近使用正确的语法,'花了很长时间的雨季闭嘴在第1行的房间

查询是这样的:

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

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

2 个答案:

答案 0 :(得分:2)

我打赌字符串中有单引号(')。在INSERT中使用它之前,请退出$topic

答案 1 :(得分: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注入攻击。