我正在使用這個類來處理我的pdo連接和數據庫操作,但是我無法讓回滾函數工作。我在$個人查詢創建一個有意的錯誤,得到以下錯誤:PHP PDO錯誤消息返回,但回滾不起作用
(!) Warning: PDO::query(): SQLSTATE[42S02]: Base table or view not found: 1146 Table 'webbshop.prson' doesn't exist in C:\wamp\www\webbshop\includes\db_con.php on line 21
但其他2個querys仍在執行,添加到數據庫中,而不是回滾。我該怎麼做才能讓這一切工作?
我在另一篇文章中讀到,你需要使用InnoDB,所以我運行了SHOW ENGINES sql命令,它表示對InnoDB的支持是默認的,並且註釋表示:「支持事務,行級鎖定和外鍵「
的PDO連接類:
<?php
class DB{
private $db_host = "localhost";
private $db_usr = "root";
private $db_pass = "";
private $db_name = "webbshop";
private $db;
function __construct(){
$this->db = new PDO('mysql:host=' . $this->db_host . ';'
.'dbname=' . $this->db_name, $this->db_usr, $this->db_pass);
$this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
}
function error(){
} €$€$£
function Trans(){
$this->db->beginTransaction();
}
function insert($sql){
$stmt = $this->db->query($sql);
}
function fetch($sql){
$stmt = $this->db->prepare($sql);
$stmt->execute();
return $stmt->fetchAll();
}
function lastInsertID() {
return $this->db->lastInsertId();
}
function commitTrans(){
$this->db->commit();
}
function rollback() {
$this->db->rollBack();
}
function __destruct() {
$this->db = null;
}
}
,這是我使用的代碼來執行querys:
<?php
require 'db_con.php';
try {
$db = new DB();
$db->Trans();
$db->insert("INSERT INTO `webbshop`.`user` (`userID`, `nick`, `pass`) VALUES (NULL, '$_POST[nick]', '$_POST[pass]')");
$nickID = $db->lastInsertID();
echo $nickID;
$pers = "INSERT INTO `webbshop`.`prson` (`personID`, `userID`, `fname`, `lname`, `persnr`, `email`) VALUES (NULL, $nickID, '$_POST[firstname]', '$_POST[lastname]', '$_POST[personnr]','$_POST[email]')";
$addr = "INSERT INTO `webbshop`.`address` (`addressID`, `userID`, `street`, `city`, `zip`) VALUES (NULL, $nickID, '$_POST[address]', '$_POST[city]', '$_POST[zip]')";
$db->insert($pers);
$db->insert($addr);
$db->commitTrans();
} catch (Exception $e) {
echo 'Caught exception: ', $e->getMessage(), "</br>";
$db->rollback();
}
是,對不起,我忘了寫。我在另一篇文章和用戶中讀到了SHOW ENGINES sql命令,它說InnoDB的支持是默認的:支持事務,行級鎖定和外鍵。 – Cevil
嘗試將PDO :: ERRMODE_WARNING更改爲PDO :: ERRMODE_EXCEPTION –
非常感謝您的幫助,一直堅持到此爲止。像魅力一樣工作! – Cevil