为什么是它MySQL的CREATE/DROP USER返回0
$dbh->exec(CREATE USER 'usr'@'localhost' IDENTIFIED BY 'Pass100');
返回0,即使在创建用户?这与MariaDB 10.
为什么是它MySQL的CREATE/DROP USER返回0
$dbh->exec(CREATE USER 'usr'@'localhost' IDENTIFIED BY 'Pass100');
返回0,即使在创建用户?这与MariaDB 10.
根据the PDO docs,PDO::exec()
返回修改或删除的行数,如果没有,则返回零。
PDO :: exec()返回您发布的SQL语句修改或删除的行数。如果没有行受到影响,PDO :: EXEC()返回0
一个CREATE USER/DROP USER
声明,但它隐含修改mysql.user
表不注册为具有影响的任何行作为INSERT
或DELETE
语句会,等exec()
返回零。
例如从命令行:
MariaDB [(none)]> CREATE USER [email protected];
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> DROP USER [email protected];
Query OK, 0 rows affected (0.00 sec)
所以0
返回值不应被理解为一个故障或falsy值处理。换句话说,要小心不要使用像一个表达式:
// 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
,或者如果您已配置则抛出异常for PDO::ERRMODE_EXCEPTION
。
@MichelBerkowski - 感谢您的全面回答。 – DroidOS
@DroidOS很高兴帮助,欢呼声。 –
_“PDO :: exec()返回你发出的SQL语句修改或删除的行数,如果没有行受到影响,PDO :: exec()返回0。 “CREATE USER”语句是一个不影响任何行的语句,尽管可能会隐式修改mysql数据库。 http://php.net/manual/en/pdo.exec.php –
我想这应该是一个答案。请继续,我会在下面发布。 –