MySQL:使用预准备语句从表中删除两列

时间:2012-05-14 10:56:03

标签: php mysql prepared-statement

我正在尝试更新两列而不删除整行。这是我正在使用的:

$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。现在,当我通过My​​SQL CLI使用update users set token='',timestamp='' where token='blahblah';时,查询工作正常。我怎样才能解决这个问题?

3 个答案:

答案 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=?";