MySQL CREATE / DROP USER返回0

时间:2015-05-28 15:49:40

标签: mysql pdo mariadb

为什么会这样?

$dbh->exec(CREATE USER 'usr'@'localhost' IDENTIFIED BY 'Pass100');
即使创建了用户,

也会返回0?这是与MariaDB 10。

1 个答案:

答案 0 :(得分:2)

根据the PDO docsPDO::exec()返回修改或删除的行数,如果没有,则返回零。

  

PDO :: exec()返回由您发出的SQL语句修改或删除的行数。如果没有行受到影响,PDO :: exec()将返回0

CREATE USER/DROP USER语句,虽然它隐式修改mysql.user表但没有注册为影响INSERTDELETE语句的任何行,因此{{ 1}}返回零。

例如,从命令行:

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

如果创建用户时出现任何错误,例如用户已存在或您缺少创建用户的权限,MariaDB会将此报告为错误,导致if ($dbh->exec("CREATE USER 'usr'@'localhost' IDENTIFIED BY 'Pass100'") === FALSE) { // Handle error } 返回PDO::exec()而不是整数FALSE,如果您为0配置了$dbh,则抛出异常。