使用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
答案 0 :(得分:2)
如果$count = $stmt->rowCount();
抛出异常,getActivity()
没有被执行,因此$ count保留上一次迭代的值(如果有的话)。
如果依赖于该值,则必须在每次迭代开始时(重新)初始化它。
答案 1 :(得分:0)
这是必须要做的事情
JSONObject msgJson = new JSONObject();
msgJson.put("#url#", "\'"+url+"\'");
System.out.println(msgJson.toString());