违反完整性约束的自定义错误消息
Custom error message for integrity constraint violation
关于当 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 块中的解决方案如下:
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}
Integrity constraint violation: 1062 Duplicate entry '5-1' for key
'franchise_state_id''
表示违反唯一键,franchise_state_id
列不允许重复值。如果 franchise_state_id
中需要重复值,那么您需要更改 table 以从 franchise_state_id
列中删除唯一约束。
但是,如果它希望存储唯一值,那么您需要对应用程序进行更改以确保您不会传递重复条目(验证条目是否已从数据库中存在)。
关于当 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 块中的解决方案如下:
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}
Integrity constraint violation: 1062 Duplicate entry '5-1' for key 'franchise_state_id''
表示违反唯一键,franchise_state_id
列不允许重复值。如果 franchise_state_id
中需要重复值,那么您需要更改 table 以从 franchise_state_id
列中删除唯一约束。
但是,如果它希望存储唯一值,那么您需要对应用程序进行更改以确保您不会传递重复条目(验证条目是否已从数据库中存在)。