为什么
$dbh->exec(CREATE USER 'usr'@'localhost' IDENTIFIED BY 'Pass100');返回0,即使创建了用户?这是与MariaDB 10。
发布于 2015-05-28 15:56:55
根据PDO文档,PDO::exec()返回修改或删除的行数,如果没有,则返回零。
PDO::exec()返回由您发出的SQL语句修改或删除的行数。如果没有任何行受到影响,PDO::exec()返回0
虽然CREATE USER/DROP USER语句隐式地修改了mysql.user表,但它并不像INSERT或DELETE语句那样注册任何行,因此exec()返回零。
例如,从命令行:
MariaDB [(none)]> CREATE USER u@localhost;
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> DROP USER u@localhost;
Query OK, 0 rows affected (0.00 sec)因此,不应将0返回值视为失败或错误值。换句话说,要小心,不要使用--类似于:
// Do not do this:
if (!$dbh->exec("CREATE USER 'usr'@'localhost' IDENTIFIED BY 'Pass100'")) {
// Handle error
}相反,使用严格的比较===来测试FALSE返回:
if ($dbh->exec("CREATE USER 'usr'@'localhost' IDENTIFIED BY 'Pass100'") === FALSE) {
// Handle error
}如果在创建用户时有任何错误,例如用户已经存在,或者您缺乏创建用户的权限,MariaDB将报告该错误,导致PDO::exec()返回FALSE而不是整数0,或者如果您为PDO::ERRMODE_EXCEPTION配置了$dbh,则抛出异常。
https://stackoverflow.com/questions/30511407
复制相似问题