Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php While循环可以用于错误捕获吗?_Php_Mysql_Error Handling_While Loop - Fatal编程技术网

Php While循环可以用于错误捕获吗?

Php While循环可以用于错误捕获吗?,php,mysql,error-handling,while-loop,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

我在将记录插入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”,但我不知道“Try-Catch”是否应该是While-True循环的一部分


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

我觉得你走错了方向。我不会尝试插入一个可能不唯一的值,而是首先尝试查看该值是否存在。您可以执行以下查询:

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,然后在_数组中运行以检查值是否存在,然后您只需访问数据库两次。不管怎么说,你真的不想滥用这样的一个尝试捕捉

mysql有这样一个函数,您可以在insert语句中添加一个“ON replice KEY UPDATE” 例如:

有关更多信息,请参见此链接:

我不使用PHP,但这是一个非常有趣的问题!异常不应用于控制流。
INSERT INTO table(x, y, z) values (?, ?, ?) ON DUPLICATE KEY UPDATE x=?;