每当我尝试发布带有撇号的内容时,都会出现以下错误:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near...
Run Code Online (Sandbox Code Playgroud)
例如,当我尝试发布/使用INSERT之类的内容时,例如“我正在努力”。这让我出错了。如果我写“我正在努力”,那一切都是美好的。
代码是:
$sql="INSERT INTO tb_table (`postcontent`, `userid`, `posttime`) VALUES ('".$_POST[content]."', '".$user_id."', '".time()."')";
Run Code Online (Sandbox Code Playgroud)
任何想法如何解决?
那是因为您使用撇号来显示MySQL,其中该字段的每个值开始和结束。如果在字符串中间加上撇号,数据库突然会认为您正在尝试在三个表字段中放入四个值,或者类似的东西。
看来您正在使用PHP在数据库中插入数据,所以我将为您提供一些使用PHP提供的方法进行处理的示例。
使用mysql_real_escape_string()修复它的快速方法:
$sql="INSERT INTO tb_table (`postcontent`, `userid`, `posttime`)
VALUES ('" . mysql_real_escape_string($_POST['content']) . "',
'" . mysql_real_escape_string($user_id) . "',
".time().")";
Run Code Online (Sandbox Code Playgroud)
更好的方法是使用准备好的语句:
$db = // your mysqli() connection
$sql="INSERT INTO tb_table (`postcontent`, `userid`, `posttime`)
VALUES (?, ?, ?)";
if ($stmt = $db->prepare($sql))
{
$stmt->bind_param("ssi", $_POST['content'], $user_id, time());
$stmt->execute();
$stmt->close();
}
Run Code Online (Sandbox Code Playgroud)
PS您不需要在time()前后加上单引号-这是一个数字,可以按原样插入。