PHP PDO更新多行我无法解决它

时间:2015-11-16 01:19:17

标签: php sql mysqli pdo

大家好我正在尝试使用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而不是在脚本本身内部,我真的很挣扎。

DB IMAGE

Database

Database

需要注意的事项: 我没有收到错误的消息!

1 个答案:

答案 0 :(得分:1)

您的更新查询仅更新一条记录,因为您只传递一条记录,即前一个select语句中的最后一条记录。要传递多个记录,您需要创建一个$weight[]数组,计算select语句的每一行,将值推送到数组中,然后通过更新查询迭代循环每个项目。

然而,您在PHP中所做的一切都可以在MySQL Update SQL查询中完成,因为MySQL带有DateDiff()和Now()函数,以及嵌套的逻辑CASE/WHEN语句(实际上,甚至是{{ 1}})。因此,您只需连接一次即可运行操作查询:

IF/THEN