2016-07-19 2 views
0

PDO와 준비된 명령문을 사용하여 간단한 삽입을 시도하고 있지만 데이터를 삽입하거나 오류를 반환하지는 않습니다. 로그도 비어 있습니다. 여기에 실행되고 있지만 아무것도하지 않는 코드가 있습니다. 값은 null이 아닙니다. MarcB이 코멘트에 지적PDO prepared statement do nothing do

try { 
    $this->exec("CREATE DATABASE IF NOT EXISTS $this->db_name;"); 
    $this->exec("USE $this->db_name;"); 
    $this->exec("CREATE TABLE IF NOT EXISTS $this->table_name (
    id INT(10) UNSIGNED AUTO_INCREMENT PRIMARY KEY, 
    firstname VARCHAR(50) NOT NULL, 
    lastname VARCHAR(50) NOT NULL, 
    email VARCHAR(50) NOT NULL, 
    phone VARCHAR(12) NOT NULL, 
    mailinglist BOOLEAN NOT NULL, 
    submitdate TIMESTAMP 
);"); 
} catch (PDOException $e) { 
    echo "DB error: " . $e->getMessage(); 
} 
+5

pdo에서 예외를 활성화 했습니까? 기본적으로 pdo는 부울 false를 반환하여 실패하고 예외가 발생하지 않습니다. –

+1

사이드 노트,';'를 사용하여 질의를 종료 할 필요가 없으므로이를 제거하십시오. 또한 @MarcB는 예외 모드에서 PDO를 먼저 설정해야한다고 말했습니다. –

+0

@MarcB 나는하지 않았다. 나는 그들이 가능하게해야한다는 것을 모르고 있었다. PDO 문서는 고통스럽다. – Jordan

답변

1

, 내가하지 않았다면에 예외를 활성화 :

try { 
    $query = $this->db_handler->prepare('INSERT INTO submissions (firstname, lastname, email, phone, mailinglist) VALUES (:firstname, :lastname, :email, :phone, :mailinglist);'); 
    $query->bindParam(':firstname', $values['firstname']); 
    $query->bindParam(':lastname', $values['lastname']); 
    $query->bindParam(':email', $values['email']); 
    $query->bindParam(':phone', $values['phone']); 
    $query->bindParam(':mailinglist', $values['mailinglist']); 
    $query->execute(); 
} catch (PDOException $e) { 
    echo "DB error: " . $e->getMessage(); 
} 

이상하게,이 코드는 바로 모든 요청에 ​​이전 코드 이전에 실행되고있는, 잘 작동 PDO. PDO 인스턴스를 인스턴스화 한 후 db_handler->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);을 사용하면 쿼리에 오류가 있음을 알 수 있습니다.