我的片段:
//I retrieve a row(s) from the table i want to update
while($row = $stmt->fetch()){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $row['url']);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_NOBODY, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_exec($ch);
$new_url = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);
curl_close($ch);
if($new_url != $row['url']){
$stmt = $conn->prepare("UPDATE footers SET footer = :footer WHERE id = :id");
$stmt->bindParam(':id', $row['id'], PDO::PARAM_INT);
$stmt->bindParam(':footer', $new_url, PDO::PARAM_STR);
$stmt->execute();
}
}
问题是它会在脚本运行时更新一行,然后在下一条记录上失败。有什么我想念的吗?
答案 0 :(得分:2)
我认为问题在于您对fetch和update命令使用相同的变量名$stmt
。此外,您可能会遇到使用相同连接迭代结果并同时更新基础表的麻烦。
我建议在一个循环上执行获取和URL检查,并创建要更新的项目数组。然后在关闭初始获取结果后,在第二个循环上迭代数组。此外,利用在循环外调用prepare
,而不是每次迭代。