当INSERT INTO包含foreach循环时,如何为完整性约束冲突创建自定义错误消息,有什么想法吗?
$states is an array;
$franchise_id is an integer;
查询:
public static function update($franchise_id, $states)
{
try
{
// establish db connection
$db = static::getDB();
$sql = "INSERT INTO franchise_states SET
state_id = :state_id,
franchise_id = :franchise_id";
$stmt = $db->prepare($sql);
foreach($states as $state)
{
$stmt->execute([':state_id' => $state, ':franchise_id' => $franchise_id]);
}
return $stmt;
}
catch (PDOException $e)
{
echo "Error updating franchise data: " . $e->getMessage();
exit();
}
}
我想补充一下--
echo '<script>';
echo 'alert("State already included.")';
echo '</script>';
--因此,用户可以保持在同一页上。
catch block中的解决方案如下:
if ($e->errorInfo[1] == 23000) {
....
}
不工作。可能是因为错误是在循环第一次迭代之后抛出的。
这也不是:
foreach($states as $state)
{
$result = $stmt->execute([':state_id' => $state, ':franchise_id' => $franchise_id]);
if (!result)
{
...
}
}
当循环运行其第一次迭代时,它似乎遇到了约束冲突,因此之后的代码不会执行。但不确定这是否真的发生了。
似乎必须可以插入自定义错误消息。如果有人知道怎么做,我会很感激任何想法或建议。
错误:
Fatal error
Uncaught exception: 'PDOException'
Message: 'SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '5-1' for key 'franchise_state_id''
Stack trace:
#0 C:\xampp\htdocs\agt\App\Models\Franchise_state.php(69): PDOStatement->execute(Array)
#1 C:\xampp\htdocs\agt\App\Controllers\Admin\Franchisors.php(336): App\Models\Franchise_state::update('5', Array)
#2 C:\xampp\htdocs\agt\Core\Router.php(206): App\Controllers\Admin\Franchisors->update()
#3 C:\xampp\htdocs\agt\public\index.php(162): Core\Router->dispatch('admin/franchiso...')
#4 {main}