我有一个更新查询,它说成功,甚至重定向页面,因为它必须。但是,表格行保持不变。
我的代码是:
根据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";
}
} ?>
请告诉我,我的代码出错了什么?
答案 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");
}
}
?>