我正在将查询从mysql转换为pdo以在mssql上运行,我有一个让我抓狂的查询:
UPDATE cms_users SET lastlogin = GETDATE() WHERE id = '1'
出于某种原因,当我在PHP应用程序上通过PDO运行它时,它会中断,但当我在Microsoft SQL Server Management Studio上运行它时它会执行。
这是我运行查询的行:
$this->db_val->query($Query,$this->db_val) or die("Error in Update Query <br> ".$Query."<br>");
当我添加一些属性以通过将以下代码放入来捕获PDO中的错误时
$this->db_val->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
我得到了这个错误:
未捕获异常"PDOException",消息为"SQLSTATE[42S22]":[Microsoft][SQL Server Native Client 11.0][SQL Server:无效列name'UPDATE cms_users SET lastlogin=GETDATE()WHERE id='1'
不确定哪一个是无效的列名,我试着把列名放在``中,但效果不好。
更新:
如果这有帮助的话,我会用不同的查询得到同样的问题:
DELETE FROM cms_audittrail WHERE transactiondate <= '2015-02-26'
这也适用于sql studio,但不适用于php应用程序。我得到:
未捕获异常"PDOException",消息为"SQLSTATE[42S22]":[Microsoft][SQL Server Native Client 11.0][SQL Server:无效列name'从cms_audittrail删除WHERE事务日期<"2015-02-26"
从$this->db_val->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
,我假设$this->db_val
是PDO
类的实例,或者是扩展或包装它的东西。
如果是PDO
的实例,为什么要将$this->db_val
放在PDO::query
方法中?
应该是:
$this->db_val->query($Query);
请参阅PDO::query。