2016-07-19 7 views
0

PDOとプリペアドステートメントを使用して単純な挿入を試みていますが、データを挿入したり、エラーを返すことはありません。ログも空です。実行されているが何もしていないコードはここにあります。値はnullではありません。PDO準備文は何もしません。

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(); 
} 

変なふうに、このコードは、右のすべてのリクエストに応じて、前のコードの前に実行されているか、正常に動作している:

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

サイドノートでは、 ';'を使ってクエリを終了する必要はありませんので、それを取り除いてください。また、@ MarkBは、例外モードでPDOを最初に設定していることを確認しました。 –

+0

@MarcB私はしませんでした。私は彼らが有効にされなければならないことさえ知らなかった。 PDOのドキュメントは痛いです。 – Jordan

答えて

1

MarcBはコメントで指摘したように、私は例外を有効にされていませんでしたPDO。 PDOインスタンスのインスタンス化後にdb_handler->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);を使用すると、クエリでエラーが発生していることがわかりました。

http://php.net/manual/en/pdo.error-handling.php