MySQL CREATE/DROP 用户 returns 0
MySQL CREATE/DROP USER returns 0
为什么
$dbh->exec(CREATE USER 'usr'@'localhost' IDENTIFIED BY 'Pass100');
returns 0 即使创建了用户?这是 MariaDB 10.
根据 the PDO docs,PDO::exec()
returns 修改或删除的行数,如果 none 为零。
PDO::exec() returns the number of rows that were modified or deleted by the SQL statement you issued. If no rows were affected, PDO::exec() returns 0
A CREATE USER/DROP USER
语句,虽然它隐式修改了 mysql.user
table 没有注册为影响任何行作为 INSERT
或 DELETE
语句会,所以 exec()
return 为零。
例如从命令行:
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
return 值不应被视为失败或虚假值。换句话说,注意不要使用这样的表达式:
// Do not do this:
if (!$dbh->exec("CREATE USER 'usr'@'localhost' IDENTIFIED BY 'Pass100'")) {
// Handle error
}
而是使用严格比较 ===
来测试 FALSE
return:
if ($dbh->exec("CREATE USER 'usr'@'localhost' IDENTIFIED BY 'Pass100'") === FALSE) {
// Handle error
}
如果在创建用户时出现任何错误,例如用户已经存在或者您没有创建它的权限,MariaDB 将报错,导致 PDO::exec()
到 return FALSE
而不是整数 0
,或者如果您为 PDO::ERRMODE_EXCEPTION
配置了 $dbh
,则抛出异常。
为什么
$dbh->exec(CREATE USER 'usr'@'localhost' IDENTIFIED BY 'Pass100');
returns 0 即使创建了用户?这是 MariaDB 10.
根据 the PDO docs,PDO::exec()
returns 修改或删除的行数,如果 none 为零。
PDO::exec() returns the number of rows that were modified or deleted by the SQL statement you issued. If no rows were affected, PDO::exec() returns 0
A CREATE USER/DROP USER
语句,虽然它隐式修改了 mysql.user
table 没有注册为影响任何行作为 INSERT
或 DELETE
语句会,所以 exec()
return 为零。
例如从命令行:
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
return 值不应被视为失败或虚假值。换句话说,注意不要使用这样的表达式:
// Do not do this:
if (!$dbh->exec("CREATE USER 'usr'@'localhost' IDENTIFIED BY 'Pass100'")) {
// Handle error
}
而是使用严格比较 ===
来测试 FALSE
return:
if ($dbh->exec("CREATE USER 'usr'@'localhost' IDENTIFIED BY 'Pass100'") === FALSE) {
// Handle error
}
如果在创建用户时出现任何错误,例如用户已经存在或者您没有创建它的权限,MariaDB 将报错,导致 PDO::exec()
到 return FALSE
而不是整数 0
,或者如果您为 PDO::ERRMODE_EXCEPTION
配置了 $dbh
,则抛出异常。