2012-04-11 64 views
4

這個問題讓我瘋狂,我試了一切。是不是給我任何錯誤,但它不會插入任何東西到數據庫中。數據庫連接很好,不應該有錯別字。請看一看,看看是否能找到問題: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)); 

幾乎可以肯定你的數據庫用戶沒有權限來執行你的要求對你試圖執行對錶的聲明。

+0

謝謝!!問題是有些值是NULL。但是它只有一些「需要」的字段,我如何向這些字段插入空白值? – 2by 2012-04-11 22:10:15

+0

您必須爲要添加到準備好的語句的每個輸入提供驗證碼。如果($ myVar === nulll){$ myVar ='';}什麼的。 – 2012-04-11 22:13:30

+0

2年後你噠炸彈 – bryan 2014-06-06 23:07:00

2

你使用自動提交嗎?如果沒有,您可能需要將您的查詢包裝在交易中。

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

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