PHP无法解析查询,但通过PMA运行是成功的

时间:2013-08-27 00:51:23

标签: php mysql sql mysqli phpmyadmin

我有以下查询:

UPDATE users_login SET LastLogin= CONCAT(CURDATE(), ' ', CURTIME()) WHERE Username=?

当我将它传递到我的PHP MySQLI查询构造中时,这会失败。但是通过PMA查询运行:

UPDATE users_login SET LastLogin= CONCAT(CURDATE(), ' ', CURTIME()) WHERE Username='Sophie'

我不知道为什么会失败。

错误讯息:

  

您的SQL语法有错误;检查手册   对应于您的MySQL服务器版本,以便使用正确的语法   '''附近,CURTIME()))在第1行用户名='Shophie''

确切代码如下:

  $Update_Parameter = array($_POST['Username']);

        $Database->rawQuery("UPDATE users_login SET LastLogin = CONCAT(CURDATE(), ' ', CURTIME() )"
            ,$Update_Parameter);

我正在外包给MySQLi Wrapper,因为我认为这是一种更简单的查询方法。 https://github.com/ajillion/PHP-MySQLi-Database-Class

2 个答案:

答案 0 :(得分:2)

如果仔细查看错误有三个)由于某种原因,不确定为什么你必须发布更多,但是,是的,

 CURTIME())) 
 UPDATE users_login SET LastLogin= CONCAT(CURDATE(), ' ', CURTIME()) WHERE Username='Sophie'

它来自哪里?

答案 1 :(得分:1)

您正在使用的mysqli包装器类中存在一个错误。

在方法MysqliDb::rawQuery()中有这行代码:

$this->_query = filter_var($query, FILTER_SANITIZE_STRING);

将转换您的查询字符串

UPDATE users_login SET LastLogin= CONCAT(CURDATE(), ' ', CURTIME()) WHERE Username=?

进入这个:

UPDATE users_login SET LastLogin= CONCAT(CURDATE(), ' ', CURTIME()) WHERE Username=?
//the single quotes now become '                ^^^^^ ^^^^^

然后将此字符串传递给mysqli::prepare(),导致语法错误。

如果你做得很认真,我建议你使用一个更成熟的图书馆。