0

我有以下查询:

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

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

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

我不知道为什么这会失败。

错误信息:

您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 '' ', CURTIME())) WHERE Username='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

4

2 回答 2

2

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

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

它从哪里来的?

于 2013-08-27T01:01:04.213 回答
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(),导致语法错误。

如果您正在认真工作,我建议您使用更成熟的库。

于 2013-08-27T03:52:13.000 回答