2016-01-23 45 views
2

我有一個更新查詢,它說成功,甚至重定向頁面,因爲它必須。但是,表格行保持不變。有人可以告訴我在PDO更新查詢中的錯誤

我的代碼是:

顯示記錄按USER_ID下面的代碼,它工作得很好:

<?php config.php ?> 
<?php $stmt = $conn->prepare("SELECT * FROM user where user_id = :user_id"); 
$stmt->bindValue('user_id', $_GET['id']); 
$stmt->execute(); 
while($user = $stmt->fetch(PDO::FETCH_OBJ)){ 
echo "form stuff to echo the fields value" ; 
} ?> 

下面的更新值碼:這工作沒有錯誤,但是,不更新記錄。

if (isset($_POST['save'])) { 
error_reporting(E_ERROR | E_PARSE | E_CORE_ERROR); 
$sql = $conn->prepare("UPDATE user SET username = :username, password = :password, firstname = :firstname, lastname =:lastname where user_id = :user_id"); 
$sql->bindParam(":user_id",$_POST["user_id"],PDO::PARAM_INT); 
$sql->bindParam(":username",$_POST["username"],PDO::PARAM_STR); 
$sql->bindParam(":password",$_POST["password"],PDO::PARAM_STR); 
$sql->bindParam(":firstname",$_POST["firstname"],PDO::PARAM_STR); 
$sql->bindParam(":lastname",$_POST["lastname"],PDO::PARAM_STR); 
if($sql->execute()){ 
echo "Successfully updated "; 
} 
else { 
echo "Not updated"; 
} 
} ?> 

請指教我,我在代碼中犯了什麼錯誤?

+2

試圖讓錯誤消息:http://stackoverflow.com/questions/3999850/pdo-error-message – Michael

回答

0

我對我的代碼進行了更改,現在它工作正常。

謝謝大家的貢獻。

工作代碼爲:

<?php 

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

          $sql = "UPDATE user SET username = :username, 
             password = :password, 
             firstname = :firstname, 
             lastname = :lastname 
             WHERE user_id = :user_id"; 
          $stmt = $conn->prepare($sql);         
          $stmt->bindParam(':username', $_POST['username'], PDO::PARAM_STR);  
          $stmt->bindParam(':password', $_POST['password'], PDO::PARAM_STR);  
          $stmt->bindParam(':firstname', $_POST['firstname'], PDO::PARAM_STR); 
          // use PARAM_STR although a number 
          $stmt->bindParam(':lastname', $_POST['lastname'], PDO::PARAM_STR); 
          $stmt->bindParam(':user_id', $_GET['id'], PDO::PARAM_INT); 
          if($stmt->execute()){ 
            header ("Location: user.php"); 

          }       
         } 
         ?> 
0

嘗試刪除這些PDO :: PARAM_INT,PDO :: PARAM_STR的東西。也許你的輸入引起的所有傷害

if (isset($_POST['save'])) { 
error_reporting(E_ERROR | E_PARSE | E_CORE_ERROR); 
$sql = $conn->prepare("UPDATE user SET username = :username, password = :password, firstname = :firstname, lastname =:lastname where user_id = :user_id"); 

$sql->bindParam(":user_id",$_POST["user_id"]); 
$sql->bindParam(":username",$_POST["username"]); 
$sql->bindParam(":password",$_POST["password"]); 
$sql->bindParam(":firstname",$_POST["firstname"]); 
$sql->bindParam(":lastname",$_POST["lastname"]); 
if($sql->execute()){ 
echo "Successfully updated "; 
} 
else { 
echo "Not updated"; 
} 
} ?> 
+0

它說成功更新,但值維持不變,因爲以前一。 –

+0

print_r($ this-> pdo-> errorInfo());從這裏得到任何錯誤? –

+0

printf($ sql-> errorinfo());你必須使用這個... –

0

至於你的解決方案,請按照以下兩個步驟:

1.檢查確實完成記錄
您可以檢查記錄,實際上是通過這種方式來實現PDOStatement::rowCount

$count = $sql->rowCount(); 
print($count); 
exit; 

在成功的消息後。

2.檢查MySQL查詢錯誤
我檢查是否有用於檢查您的查詢有錯誤或者沒有任何代碼。你可以通過這種方式使用PDOStatement::errorInfo()

echo "\nPDOStatement::errorInfo():\n"; 
$arr = $sql->errorInfo(); 
print_r($arr); 

希望這對你有幫助。

+0

它說: PDOStatement :: errorInfo():Array([0] => [1] => [2] =>) 以及它說0行受到影響 –

相關問題