PDO成功更新行然后失败?

时间:2014-01-14 02:57:51

标签: mysql pdo

我的片段:

//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();
    }
}

问题是它会在脚本运行时更新一行,然后在下一条记录上失败。有什么我想念的吗?

1 个答案:

答案 0 :(得分:2)

我认为问题在于您对fetch和update命令使用相同的变量名$stmt。此外,您可能会遇到使用相同连接迭代结果并同时更新基础表的麻烦。

我建议在一个循环上执行获取和URL检查,并创建要更新的项目数组。然后在关闭初始获取结果后,在第二个循环上迭代数组。此外,利用在循环外调用prepare,而不是每次迭代。

相关问题