我正在尝试更新两列而不删除整行。这是我正在使用的:
$sql='update users set token='',timestamp='' where token=?';
$stmt=$db_con->stmt_init();
$stmt->prepare($sql_3);
$stmt->bind_param('s',$token);
$stmt->execute();
但是,它给了我这个错误:T_CONSTANT_ENCAPSED_STRING。现在,当我通过MySQL CLI使用update users set token='',timestamp='' where token='blahblah';
时,查询工作正常。我怎样才能解决这个问题?
答案 0 :(得分:2)
使用此
$sql="update users set token='',timestamp='' where token=?";
您可以在此处找到有关如何逃避字符串的更多信息 http://php.net/manual/en/language.types.string.php
答案 1 :(得分:1)
你应该使用。
$sql="update users set token='',timestamp='' where token=?";
注意字符串开头和结尾的双引号(“)。
因为你在字符串中使用多个单引号,PHP不理解这一点,并会抛出错误。你需要告诉php以逃避报价。你可以用两种方式做到这一点。
1)在引用前面使用PHP的\
转义字符。
'update users set token=\'\',timestamp=\'\' where token=?';
2)对字符串使用双引号而不是单引号。
"update users set token=\'\',timestamp=\'\' where token=?";
两者都应该有效。
答案 2 :(得分:0)
在这里,我想告诉您,由于查询是单引号,并且您在查询字符串中使用过多次单引号。 PHP将接受从第一个引用到下一个引用的字符串,这就是为什么你得到错误但是在命令行中这不会产生错误
$sql='update users set token='',timestamp='' where token=?'; to
$sql="update users set token='',timestamp='' where token=?";