Can While Loop可用于错误捕获吗?

时间:2015-02-13 16:00:53

标签: php mysql error-handling while-loop

我在将记录插入MySQL表时使用try catch算法。我的脚本语言是PHP。

try {
 /*
 UDID generation algo goes here.
 */
$sql = "INSERT INTO tablex (udid, name)
VALUES ('$udid', 'Doe')";

$conn->exec($sql);
echo "New record created";
}
catch(PDOException $e)
{
echo "Error"
}

$conn = null;

如何重新编写上面的内容,以便使用循环代替try catch。如果出现错误,请重试。如果没有错误,则跳出循环。

有"而真实"但我不知道"尝试捕获"应该是While True循环的一部分..

这样做的目的是保存UDID - 在MYSQL中设置唯一值。如果我生成相同的值,我可能会收到错误。因此,为什么循环。

2 个答案:

答案 0 :(得分:1)

我觉得你这样做是错误的。我会尝试先查看该值是否存在,而不是尝试插入可能不唯一的值。您可以执行诸如

之类的查询
do {
   //$udid = create uuid

   $query = "SELECT COUNT(*) FROM tablex WHERE udid = :udid";
   $statement = $pdo->prepare($query);
   $statement->bindValue("udid", $udid);
   $result = $statement->fetchAll();
} while ($result["count"] === 1);

//insert row into table

这只是我的头脑,它可以更好地重构。如果您愿意,还可以利用您的数据库为您生成UDID。你可以运行一个查询来从你的表中获取所有的udid,然后运行in_array来检查值是否存在,那么你只需要两次点击你的数据库。无论如何,你真的不想尝试滥用这样的尝试。

答案 1 :(得分:0)

mysql有这样的功能你会添加一个" ON DUPLICATE KEY UPDATE"到你的插入声明 例如:

INSERT INTO table(x, y, z) values (?, ?, ?) ON DUPLICATE KEY UPDATE x=?;

另请参阅此链接以获取更多信息: http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html