gpt4 book ai didi

mysql - 当指定的用户不存在时,PDO 连接不会返回错误

转载 作者:行者123 更新时间:2023-11-30 00:01:18 24 4
gpt4 key购买 nike

我正在开发一个配置界面,客户端必须在其中指定数据库参数(主机、用户、密码、数据库)。

try{
$c = new PDO('mysql:host='.$_POST['database_host'].';charset=utf-8', $_POST['database_user'], $_POST['database_password']);
$c->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_WARNING);
$c->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE,PDO::FETCH_OBJ);
$c->query("USE `".$_POST['database']."`;");
}
catch(Exception $e)
{
if(strstr($e->getMessage(),"[1045] Access denied for user '".$_POST['database_user']."'@'".$_POST['database_host']."' (using password: NO)"))
{
$errors[] = "This user requires a password.";
$fields['database_password']['valid'] = false;
}
else if(strstr($e->getMessage(),"[1045] Access denied for user '".$_POST['database_user']."'@'".$_POST['database_host']."' (using password: YES)"))
{
$errors[] = "Wrong password or unexisting user.";
$fields['database_password']['valid'] = false;
$fields['database_user']['valid'] = false;
}
else echo $e->getMessage();
}

如果我输入的现有用户密码错误或没有密码,则会捕获错误(错误消息显示“此用户需要密码。”或“密码错误或不存在的用户。”)。但如果我输入一个不存在的用户,则不会抛出任何错误,只会发出警告

警告:PDO::query(): SQLSTATE[42000]: 语法错误或访问冲突:1044 用户 ''@'localhost' 访问 C:\wamp\www\中的数据库 'mediatheque' 被拒绝mediatheque3\index.php 第 425 行

脚本继续运行,我不知道如何停止它并通知用户错误的用户名。

我应该如何处理这个问题?谢谢。

最佳答案

这是有道理的,因为您在创建连接对象后设置了ERRMODE_EXCEPTION,所以为时已晚。

解决方案是将属性传递给 PDO 构造函数:

$attribute = array(
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE,PDO::FETCH_OBJ
);
$c = new PDO('mysql:host='.$_POST['database_host'].';charset=utf-8',
$_POST['database_user'], $_POST['database_password'],
$attribute);

关于mysql - 当指定的用户不存在时,PDO 连接不会返回错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25016858/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com