使用PHP PDO,使用rowCount进行异常行为并捕获异常

时间:2016-02-29 19:07:16

标签: php mysql pdo

使用PHP / PDO并执行INSERT时,我遇到了一些异常行为。以下是一些示例代码:

foreach ($all_users as $this_user) {
    try {
        $stmt = $db->prepare('INSERT INTO fav_colors (name, color, whattime) VALUES (:name, :color, :whattime)');
        $stmt->bindValue(':name', $this_user[name]);
        $stmt->bindValue(':color', $this_user[color]);
        $stmt->bindValue(':whattime', $this_user[time]);
        $stmt->execute();
        $count = $stmt->rowCount();
    } catch(PDOException $e) { catchMySQLerror($e->getMessage()); }

    if ($count == 1) {
        echo "Successful write to table";
    } elseif ($count == 0) {
        echo "ERROR writing row to table";
    }

}

假设我要插入10个名称/颜色,时间为DATETIME格式(2016-01-01 12:00:00)。我有一个关于这段代码的循环,在代码之后我检查$ count以查看插入是否正常。

这是我的问题。 10个插入中的一个,无论出于什么原因,$ write_time都是空白的。 mySQL生成错误(不能为null)。我的自定义函数catchMySQLerror将错误写入表并通过电子邮件发送给我。确实如此,但是这个条目的$ count仍然是1,根据它,即使记录没有插入,一切都很好。

我在这里用来捕获异常的try / catch问题是什么?如何添加能够更好地处理代码中的错误的内容?我知道我可以在catchMySQLerror行之后添加更多行,并以这种方式处理错误。这就是我所做的。但我想使用if / else处理错误,并且使用我刚刚提到的方法,我只能处理错误...如果成功则不行。

更新:我编辑了代码以显示我如何使用$ count

2 个答案:

答案 0 :(得分:2)

如果$count = $stmt->rowCount();抛出异常,getActivity()没有被执行,因此$ count保留上一次迭代的值(如果有的话)。
如果依赖于该值,则必须在每次迭代开始时(重新)初始化它。

答案 1 :(得分:0)

这是必须要做的事情

    JSONObject msgJson = new JSONObject();
    msgJson.put("#url#", "\'"+url+"\'");
    System.out.println(msgJson.toString());