为什么会这样?
$dbh->exec(CREATE USER 'usr'@'localhost' IDENTIFIED BY 'Pass100');
即使创建了用户,也会返回0?这是与MariaDB 10。
答案 0 :(得分:2)
根据the PDO docs,PDO::exec()
返回修改或删除的行数,如果没有,则返回零。
PDO :: exec()返回由您发出的SQL语句修改或删除的行数。如果没有行受到影响,PDO :: exec()将返回0
CREATE USER/DROP USER
语句,虽然它隐式修改mysql.user
表但没有注册为影响INSERT
或DELETE
语句的任何行,因此{{ 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
,则抛出异常。