我有一个更新查询,它说成功,甚至重定向页面。但是,表行保持不变。
我的代码是:
以下代码用于显示记录 根据 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");
}
}
?>