이 클래스를 사용하여 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