我有一个非常简单的问题。
有没有办法将数据库错误与格式良好的警告联系起来?
我的意思是例如用户在网站中注册并且他/她选择的用户名已被采用,因此在保存到数据库时会发生以下错误:
SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'peter' for key 'username'
我真的不想向用户展示这个,但更像是: “已选择的用户名已被采用”
识别错误并输出格式良好警告的最佳方法是什么?
提前致谢
答案 0 :(得分:0)
首先执行选择查询以检查是否已使用用户名。只有在不插入的情况下才会插入。
理想情况下,您可以锁定表或使用事务,但实际上,如果两个查询彼此接近,则可能没问题。
答案 1 :(得分:0)
您可以先检查是否已使用用户名:
$num_rows_aff = SELECT * FROM table where username = 'peter';
If($num_rows_aff > 0)
{
// Username exists, Output "Username is taken";
}else{
// Insert username into database
}
答案 2 :(得分:0)
您可以尝试编写一些基本的数据库函数,例如exists()等,您可以传递自定义错误字符串。像这样:
<?php
class DB {
private $_instance;
public function __construct() {
$this->_instance = new MySQLI('server','username','password','database');
}
public function exists($sql, $msg) {
$result = $this->_instance->query($sql);
if ($result->num_rows > 0) {
throw new FrontDBException($msg);
}
return false;
}
}
class FrontDBException extends Exception {
public function __toString() {
echo($this->getMessage());
}
}
$db = new DB();
try {
$db->exists('SELECT id FROM users WHERE username="' . $username . "'",
'Username is already taken.');
} catch(FrontDBException $e) {
echo($e);
}
?>
但是你无法真正预测传入的错误,当你只是进行基本的查询时,你需要将它包装在特定的函数中。