我有以下查询:
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
答案 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()
,导致语法错误。
如果你做得很认真,我建议你使用一个更成熟的图书馆。