【发布时间】:2015-11-16 01:19:17
【问题描述】:
大家好,我正在尝试使用 PDO 方法通过 PHP 更新我的数据库,我的脚本连接到我的数据库并根据设置的 clientID 选择所需的所有数据,然后计算出今天日期和创建日期之间的差异.
然后它继续根据年龄(1 到 6 之间的数字)为每个结果分配一个权重
我需要它做的是用新的权重更新数据库中clientID相同的所有记录。
这就是我出错的地方所有工作都很好,直到这一点!我的 UPDATE 语句只更新最后一个(最高)ID(如果有多个记录返回相同的 clientID)
$hostdb = '';
$namedb = '';
$userdb = '';
$passdb = '';
try{
$conn = new PDO("mysql:host=$hostdb; dbname=$namedb", $userdb, $passdb);
$conn->exec("SET CHARACTER SET utf8"); // Sets encoding UTF-8
$sql = "UPDATE parked SET weight = :weight
WHERE ID = :ID";
$stmt = $conn->prepare($sql);
$stmt->bindParam(':ID', $ID, PDO::PARAM_INT);
$stmt->bindParam(':weight', $weight, PDO::PARAM_INT);
$stmt->execute();
$conn = null; // Disconnect
}
catch(PDOException $e) {
echo $e->getMessage();
}
?>
由于我之前从未一次更新过一条以上的记录,而且通常是通过 $_POST 而不是脚本本身,我真的很挣扎。
数据库映像
注意事项: 我没有收到任何错误消息!
【问题讨论】:
-
这是很多代码和很多细节,大部分是不必要的。如果你把它归结为一个简单的例子,你会得到更好的帮助。见:How to create a Minimal, Complete, and Verifiable example.
-
另外,如果您想在单个语句中更新具有不同值的多行,您正在寻找
CASE ... WHEN ...语法。 -
为了方便调试,因为您的问题没有更新,请尝试回显您的更新语句并在您的 SQL 上运行它
-
@mike1992 问题下方有一个edit 链接。
-
为了避免 SQL 注入,请为此使用准备好的语句: $sql = $conn->query("SELECT * FROM parked WHERE clientID = $clientID");