gpt4 book ai didi

mysql - PDO更新语法困难

转载 作者:行者123 更新时间:2023-11-29 23:17:13 29 4
gpt4 key购买 nike

我有一个包含表“评论”的数据库。它包含按 id 编号的照片、喜欢和不喜欢的数量以及“pr”,“pr”是某种照片等级,表示喜欢和不喜欢之间的差异。我回应了 PR,看起来计数是正确的。PDO 存在一些问题。我想将其添加到数据库中,但没有任何反应,没有错误等我做错了什么?

<?php
$pdo = new PDO('mysql:host=localhost;dbname=databasename;encoding=utf8', 'login', 'password');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);


$stmt = $pdo -> query('SELECT * FROM photos');
while($all = $stmt ->fetch()){
$id = $all['id'];
$likes = $all['likes'];
$dislikes = $all['dislikes'];
$pr = $likes - $dislikes;

$stmt = $pdo -> prepare ("UPDATE photos SET ('pr' = :pr) WHERE 'id' = '".$id."' ");
}


?>

编辑我的第一次尝试:

$stmt = $pdo -> prepare ("UPDATE photos SET `pr` = :pr WHERE `id` = :id ");

最佳答案

不要在作业两边加上括号。如果需要转义列名,请使用反引号,而不是单引号。

UPDATE photos SET `pr` = :pr WHERE `id` = :id

您还应该使用 ID 占位符,不要连接 $id

然后您需要绑定(bind)参数:

$stmt->bindParam(':id', $id);
$stmt->bindParam(':pr', $pr);

另一个问题是,您对第一个查询的结果和第二个查询的准备语句使用相同的变量 $stmt

整个重写的代码如下所示:

$res = $pdo->query('SELECT id, likes, dislikes FROM photos');
$stmt = $pdo->prepare("UPDATE photos SET `pr` = :pr WHERE `id` = :id ");
$stmt->bindParam(':id', $id);
$stmt->bindParam(':pr', $pr);
while ($all = $res->fetch(PDO::FETCH_ASSOC)) {
$id = $all['id'];
$pr = $all['likes'] - $all['dislikes'];
$stmt->execute();
}

但也无需对 SELECTUPDATE 使用单独的查询,您可以一次完成所有操作:

$pdo->query("UPDATE photos SET pr = likes - dislikes");

关于mysql - PDO更新语法困难,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27672822/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com