2012-08-11 70 views
0

问题是,每当我在我的php页面的形式输入一个大屁股文本并尝试INSERT它通过SQL查询到数据库,它给了我一个错误像这样:在SQL查询中插入很长的字符串 - 错误

“您的SQL语法错误;检查对应于你的MySQL服务器版本使用附近的‘样本标题“正确的语法手册’,度过了雨季的漫长岁月季节闭嘴在第1行的小房间里

查询是这样的:

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

有趣的是,当我手动插入值并在phpmyadmin中运行查询时,它不会出现错误。

+4

你逃脱了弦? – vzwick 2012-08-11 19:01:02

回答

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注入攻击。

2

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