Вы можете полностью избежать всего этого кода, просто выполнив следующее:
$db->query("UPDATE videos SET vkey = MD5(CONCAT(vkey, 'video'))");
(Или вы можете выполнить этот запрос в своем бэкэнде, например, 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()
, чтобы проверить, были ли затронуты какие-либо строки.