我正在尝试让PHP代码更新用户表中的地址。
对于初学者,使用mysqli,并尝试了两个预处理语句以及更简单的查询。从来没有对准备好的陈述好运,因为我发现它们令人困惑,特别是bind_result()。
我在命令本身使用mysql测试,以确保它按预期工作。应该更新,因此它不是mysql命令本身。我甚至在服务器上本地在phpMyAdmin中试了一下。但是,一旦在PHP中,它就不会更新表中的数据。
立即想到的是确保用户'访问mysql表有UPDATE权限,确实如此。所以它看起来不像是一个权限问题。即使我使用具有所有权限和特权的mysql root,该表也不会更新。
我最初的尝试很简单:
$query = "UPDATE `UserTable` SET `Address`=\"". $address . "\" WHERE `id`=".$id;
$conn->query($query);
所以,我尝试了这个准备好的声明版本并且具有相同的效果。没错,但我的表格没有任何改变。
今天,我决定采用PDO路线。
try {
$dbh = new PDO("mysql:host=$hostname; dbname=DBDatabase", $db_user, $db_pass);
$query = "UPDATE UserTable SET 'Address'='".$address."' WHERE 'id'=".$id;
echo "Query: ". $query;
$count = $dbh->exec($query);
echo $count . " record changed.";
$dbh = null;
}
catch (PDOException $e) {
echo $e->getMessage();
}
我也试过改变其他字段(也许它只是发生在像地址这样的VARCHAR字段)。因此,我尝试翻转已注册的标志,并且没有更改注册。
答案 0 :(得分:3)
您未正确使用PDO。这就是您想要形成查询的方式。
try {
$dbh = new PDO('mysql:host=$hostname; dbname=DBDatabase', $db_user, $db_pass);
$stmt = $dbh->prepare('UPDATE UserTable SET `Address`=:address WHERE `id`=:id');
$stmt->bindParam(':address', $address, PDO::PARAM_STR);
$stmt->bindParam(':id', $id, PDO::PARAM_INT);
$stmt->execute();
}
catch (PDOException $e) {
echo $e->getMessage();
}
答案 1 :(得分:1)
这不是你的直接问题,但准备好的陈述非常简单,只需要一个学习曲线 - 老实说,从个人经验来看,这并不比学习PDO更陡峭。
传统查询步骤:
准备好的查询:
$result
数组循环显示结果。这是一些额外的步骤,但需要花费20分钟来概念化它,它们将全部拼凑在一起。 PDO的优势在于它适用于不同的数据库,并且在准备好的语句中非常出色。