有人可以告诉我PDO更新查询中的错误吗?


Can someone tell me the error in PDO update query

我有一个更新查询,它说成功,甚至重定向页面。但是,表行保持不变。

我的代码是:

以下代码用于显示记录 根据 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";
} 
} ?>

请告诉我,我在代码上犯了什么错误?

至于您的解决方案,请遵循两个步骤:

1. 检查实际受影响的记录
您可以使用PDOStatement::rowCount检查记录是否实际通过这种方式受到影响:

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

在成功消息后。

2. 检查 MySql 查询错误
我检查是否有代码可以检查您的查询是否有错误。您可以使用PDOStatement::errorInfo()通过这种方式进行检查。

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

希望这对你有帮助。

尝试删除那些 PDO::P ARAM_INT , PDO::P ARAM_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";
} 
} ?>

我对我的代码进行了更改,现在它运行良好。

谢谢大家的贡献。

工作代码是:

<?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");
                            }                           
                        }
                        ?>