有人能告诉我PDO更新查询中的错误

时间:2016-01-23 05:20:12

标签: php 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";
} 
} ?>

请告诉我,我的代码出错了什么?

3 个答案:

答案 0 :(得分: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";
} 
} ?>

答案 1 :(得分:0)

至于您的解决方案,请按以下两个步骤操作:

<强> 1。检查实际影响的记录
您可以使用PDOStatement::rowCount

以这种方式检查记录是否实际受影响
$count = $sql->rowCount(); 
print($count); 
exit; 

在成功消息之后。

<强> 2。检查MySql查询错误
我检查没有代码检查您的查询是否有错误。您可以使用PDOStatement::errorInfo()

以这种方式检查
echo "\nPDOStatement::errorInfo():\n";
$arr = $sql->errorInfo();
print_r($arr);

希望这对你有所帮助。

答案 2 :(得分: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");

                            }                           
                        }
                        ?>