php PDO循环查询

zzoitvuj  于 2023-11-16  发布在  PHP
关注(0)|答案(2)|浏览(130)

我有这样的代码:

$sql = "SELECT id FROM videos";
$stmp = $db->prepare($sql);
$stmp->execute();
while ($row = $stmp->fetchAll(PDO::FETCH_ASSOC)) {

    $vkey = md5($row['id'] . "video");

    $sql = "UPDATE videos SET vkey = :vkey WHERE id = :id";
    $stmp = $db->prepare($sql);
    $stmp->execute(array(
        ":vkey" => $vkey,
        ":id"   => $row['id']
    ));

}

字符串
为什么execute只针对第一个select中的第一个id,而不是循环中的所有id?

xzlaal3s

xzlaal3s1#

你可以通过这样做来完全避免所有这些代码:

$db->query("UPDATE videos SET vkey = MD5(CONCAT(vkey, 'video'))");

字符串
(Or你可以在你的后台做这个查询,比如PHPMyAdmin UPDATE videos SET vkey = MD5(CONCAT(vkey, 'video'))
但是,如果您出于某种原因想要遍历数据库,您可以这样做:

$sql = "SELECT id FROM videos";

//no reason to use prepare() because you aren't passing variables.
$stmp = $db->query($sql);
$stmp->execute();
$results = $stmp->fetchAll(PDO::FETCH_ASSOC);

//prepare UPDATE query outside of loop, this way you don't send 2 requests to your database for every row
$stmp = $db->prepare("UPDATE videos SET vkey = :vkey WHERE id = :id");

foreach($results as $result) {
    $vkey = md5($result['id']."video");
    $stmp->execute(
        array(
            ":vkey" => $vkey, 
            ":id" => $result['id']
        )
    );
}


此外,检查循环内的返回值以确保没有错误通常是一个好主意,您可以通过使用类似$stmp->rowCount()的东西来检查是否有任何行受到影响。

daolsyd0

daolsyd02#

你需要一个

$stmt->closeCursor();

字符串
否则,语句在第一次运行时就会卡住。你可能想用try...catch来检查,回显错误消息。

相关问题