MySQL表未更新(PDO)

时间:2014-05-07 17:32:13

标签: php mysql pdo

我正在尝试让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字段)。因此,我尝试翻转已注册的标志,并且没有更改注册。

2 个答案:

答案 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更陡峭。

传统查询步骤:

  1. 数据库查询。
  2. DB结果。
  3. 准备好的查询:

    1. 发送没有参数的数据库查询,准备。
    2. 插入参数。
    3. 连接到结果(按顺序为每个返回列绑定变量)。
    4. 使用变量而不是$result数组循环显示结果。
    5. 这是一些额外的步骤,但需要花费20分钟来概念化它,它们将全部拼凑在一起。 PDO的优势在于它适用于不同的数据库,并且在准备好的语句中非常出色。