2013-06-27 117 views
-2

我試圖插入值到MySQL數據庫,但由於某種原因,這是行不通的。我可以讓它與普通的PHP一起工作,但我被告知PDO會更安全。這是我使用的代碼,值被張貼到php文件,但沒有更新到MySQL。這可能是什麼原因?如何將表單值插入與PDO

<?php 
include 'config.php'; 

// database connection 
$conn = new PDO("mysql:host=$dbhost;dbname=$dbname",$dbuser,$dbpass); 

// new data 

$value1 = $_POST["value1"]; 
$value2 = $_POST["value2"]; 
$value3 = $_POST["value3"]; 
$value4 = $_POST["value4"]; 
// query 
$sql = "INSERT INTO `database`.`table` 
(`id`, `value1`, `value2`, `value3`, `value4`, `timeStamp`) 
VALUES (NULL, ?, ?, ?, ?, CURRENT_TIMESTAMP)"; 
$q = $conn->prepare($sql); 
$q->execute(array($value1, $value2, $value3, $value4)); 


?> 
+2

[PDO查詢失敗,但我看不到任何錯誤。如何從PDO獲取錯誤消息?](http://stackoverflow.com/a/15990858/285587) –

+0

始終檢查錯誤並返回值。並且總是在你的問題中提及這些。 「不起作用」不是問題。 – GolezTrol

回答

-2

改變這一行

$conn = new PDO("mysql:host=$dbhost;dbname=$dbname",$dbuser,$dbpass); 

這個

$conn = new PDO("mysql:host=$dbhost;dbname=$dbname",$dbuser,$dbpass, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION)); 

和使用嘗試捕捉上

try 
{ 
    $q->execute(array($value1, $value2, $value3, $value4)); 
} 
catch(Exception $e) 
{ 
    echo $e->getMessage(); 
    //other code to handle exception for example logging, rollback transaction if exists etc. 
} 

當你做這些改變則PDO異常會被拋出你會看到什麼問題。有了PDO異常,你可以做更多的處理錯誤,例如,如果你使用事務,那麼你可以在catch塊中回滾它。

  1. 您可以使用error_reporting(E_ALL);並用的display_errors ini_set()

  2. 您還可以使用PDO::errorInfo

manual

PDO :: errorInfo中 - 獲取與數據庫上的最後一個操作相關聯的錯誤信息處理

查看範例檢查this link

檢查這些鏈接:

+0

如果你只是想立即捕捉異常,不妨使用舊的'if(!$ q-> execute())echo $ q-> errorCode()'。 – deceze

+0

@deceze確定它會工作,但我更喜歡try/catch :) – Robert

+0

例外的一點是它們*冒泡*並自動阻止執行下面的代碼。如果你不讓異常冒泡並立即繼續使用相同範圍的代碼,那麼你只是做了一個更復雜的'return false'檢查。 – deceze