2012-04-11 16 views
4

この問題は私を狂わせてしまい、すべてを試しました。 Isは私に何のエラーも与えませんが、データベースにも何も挿入しません。データベース接続は良好で、タイプミスはありません。見てみると、あなたは問題を見つけることができるかどうかを確認してください。またPHP PDOの準備された挿入 - データを挿入せずにエラーを表示しない

$err = array(); 

if (isset($_POST['submit'])) { 

    $ip = gethostbyname($_SERVER['REMOTE_ADDR']); 
    $date = "2012-02-02 02:02:02"; //Example 
    $uploader_name = $_POST['uploader_name']; 

    // Validation happens here... 


    if (empty($err)) { 

     $host = "host"; 
     $dbname = "db"; 
     $user = "user"; 
     $pass = "pass"; 

     try { 
      $dbh = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass); 

      $sql = "INSERT INTO `table` (`ip`, `date`, `uploader_name`) 
        VALUES (:ip, :date, :uploader_name)"; 
      $stmt = $dbh->prepare($sql); 

      # the data we want to insert 
      $params = array(
       ':ip' => $ip, 
       ':date' => $date, 
       ':uploader_name' => $uploader_name 
      ); 


      $stmt->execute($params); 

      $dbh = null; 

     } catch(PDOException $pe) { 
      die('SQL Error'); 
     } 


     if (empty($err)) { 
      $err[] = "Success!"; 
     } 
    } 

} 

を、私は「成功」メッセージが表示されますので、それは、挿入部に到達イム確認してください。

答えて

10

このコードを使用して、明細書を実行してください。致命的でないエラーがあれば、それを表示します。

$stmt->execute($params) or die(print_r($stmt->errorInfo(), true)); 

dbユーザーには、実行しようとしているテーブルに対して要求している文を実行する権限がありません。

+0

ありがとう!!問題は一部の値がNULLであることでした。しかし、その "唯一の"フィールドのいくつかは "必要な"、どのように私はこれらのフィールドに空白の値を挿入するのですか? – 2by

+0

準備された文に追加する入力ごとに検証コードを提供する必要があります。 if($ myVar === nulll){$ myVar = '';}か何か。 –

+0

2年後にあなたは大爆弾 – bryan

2

オートコミットを使用していますか?そうでない場合は、トランザクションでクエリをラップする必要があります。

try 
{ 
    $dbh->beginTransaction(); 
    // your code. 
    $dbh->commit(); 
} 
catch(PDOException $pe) 
{ 
    $dbh->rollback(); 
    die($pe->getMessage()); 
} 

http://php.net/manual/en/pdo.transactions.php

関連する問題