我在将记录插入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中设置唯一值。如果我生成相同的值,我可能会收到错误。因此,为什么循环。
答案 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