【发布时间】:2016-11-01 11:50:11
【问题描述】:
我正在尝试使用 PDO 准备语句执行以下查询,但是当我调用 $query->fetch(); 时,它会引发异常 SQLSTATE[HY000]: General Error。
这是 PHP 代码(注意类 Database - 或代码中的变量 $db - 只是类 PDO 的简单包装,因此所有 PDO 调用都必须使用 $db->pdo->{some PDO function}(); 完成):
$db = new Database(); //Create a new object of type Database establishing a connection to the MySQL database
$query = $db->pdo->prepare("INSERT INTO `orders` (`order_type`, `item`, `amount`, `price`, `price_btc`, `status`, `timestamp`, `placed_by`, `secret`, `first_name`, `last_name`, `address_1`, `address_2`, `city`, `zip_code`, `country`, `state`, `phone_number`)
VALUES(:order_type, :item, :amount, :price, :price_btc, :status, :timestamp, :placed_by, :secret, :first_name, :last_name, :address_1, :address_2, :city, :zip_code, :country, :state, :phone_number);
SELECT * FROM `orders` WHERE `ID`=LAST_INSERT_ID();"); //Prepare the two queries to be executed
/*HERE IS SOME CODE TO BIND PLACEHOLDERS TO SOME VALUES*/
if(!$query->execute()){
error(); //Handle the error and terminate execution
}
if($query->rowCount() != 1){
error(); //Handle the error and terminate execution
}
$query->setFetchMode(PDO::FETCH_ASSOC);
$order = $query->fetch(); //THIS IS WHERE THE EXCEPTION IS THROWN!
我尝试通过 PHPMyAdmin 手动执行查询,它运行良好。我还读到 PDO 不支持在同一语句中进行多个查询,但是在运行 $query->execute(); 时不应该抛出异常吗?
另外,$query->rowCount(); 确实返回 1,但是当我尝试获取结果时,它会引发一般错误异常。
我尝试了很多其他方法,例如将 SELECT 语句替换为 SELECT LAST_INSERT_ID();,但似乎没有任何效果。
感谢您的帮助!
【问题讨论】:
-
/*HERE IS SOME CODE TO BIND PLACEHOLDERS TO SOME VALUES*/- 因此,将代码留给您认为不相关的绑定,或者您没有绑定这些代码?问题不清楚(对我来说)。或者,这个问题更像是“为什么会有这种行为”? -
为什么需要
SELECT * FROM `orders` WHEREID=LAST_INSERT_ID();?使用php.net/manual/en/pdo.lastinsertid.php。