使用撇号时的SQL错误

Izu*_*umi 2 mysql sql

每当我尝试发布带有撇号的内容时,都会出现以下错误:

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)

任何想法如何解决?

Row*_*wlf 5

那是因为您使用撇号来显示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()前后加上单引号-这是一个数字,可以按原样插入。