2011-05-10 49 views
0

請幫助,這是不插入到數據庫爲什麼這個PDO插入不起作用?

$dbh = new PDO('mysql:host=localhost;dbname=blog', root, root); 

if($dbh){ 

// use the connection here 

$stmt = $dbh->prepare("INSERT INTO comments (blog_id,dateposted,name,comment) VALUES (:blog_id,:dateposted,:name,:comment)"); 
$stmt->bindParam(':blog_id', $validentry); 
$stmt->bindParam(':dateposted', NOW()); 
$stmt->bindParam(':name', $_POST['name']); 
$stmt->bindParam(':comment', $_POST['comment']); 
$stmt->execute(); 

// and now we're done; close it 

}else{ 
    echo mysql_error(); 
} 

$dbh = null; 
//redirect after posting 
+0

有什麼錯誤?如果沒有錯誤 - 那麼要麼你沒有看到它們,要麼沒有錯誤,代碼工作正常。 – zerkms 2011-05-10 03:51:26

+0

沒有錯誤頁面只發布後空白 – ktm 2011-05-10 03:59:46

+2

打開錯誤。在這裏討論了數百萬次。搜索error_reporting()+ display_errors。另請閱讀如何從PDO中檢索錯誤。 'mysql_error'與PDO – zerkms 2011-05-10 04:02:46

回答

0

變化NOW()date('Y-m-d H:i:s')

+1

無關,這取決於實際的時間設置和時區,這可能會導致一些問題。我建議直接在查詢中用'NOW()'替換佔位符。 – zerkms 2011-05-10 03:58:43

+0

仍然沒有運氣,同樣的問題 – ktm 2011-05-10 03:58:50

+0

實際上它的工作感謝 – ktm 2011-05-10 04:07:00

3

$ stmt-> bindParam( ':dateposted',NOW());

PDOStatement::bindParam()結合參數的PHP可變參考。因此,它需要第二個參數是一個變量。

您可改爲使用PDOStatement::bindValue()來使用函數的文字或返回值。

另外,NOW()不是PHP函數,因此不能在這裏使用。如果你只是想要使用DB功能,硬編碼到語句,如

INSERT INTO comments (blog_id,dateposted,name,comment) 
VALUES (:blog_id, NOW(), :name, :comment) 
0

菲爾,OK,但如果你需要的bindParam分配取決於一個條件的值?

在我的情況下,我想讓用戶定義創建日期,如果他想。

$stmt = $conn->prepare('INSERT INTO news (title_fr, content_fr, creation_date) VALUES (:title_fr, :content_fr, :creation_date)'); 

if($date) { 
    $stmt->bindParam(':creation_date', $date); 
} else { 
    $stmt->bindParam(':creation_date', NOW()); 
}