MySQL CREATE/DROP USER 返回 0
Posted
技术标签:
【中文标题】MySQL CREATE/DROP USER 返回 0【英文标题】:MySQL CREATE/DROP USER returns 0 【发布时间】:2015-08-11 05:56:24 【问题描述】:为什么会这样
$dbh->exec(CREATE USER 'usr'@'localhost' IDENTIFIED BY 'Pass100');
即使创建了用户也返回 0?这适用于 MariaDB 10。
【问题讨论】:
"PDO::exec() 返回被您发出的 SQL 语句修改或删除的行数。如果没有行受到影响,则 PDO::exec() 返回 0。 " 所以我的假设是CREATE USER
语句不会影响任何行,尽管可能会隐式修改 mysql
数据库。 php.net/manual/en/pdo.exec.php
我想这应该是一个答案。稍等,我会在下面发布。
【参考方案1】:
根据the PDO docs,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
而不是整数@987654336 @,或者如果你为PDO::ERRMODE_EXCEPTION
配置了$dbh
,则抛出异常。
【讨论】:
@MichelBerkowski - 感谢您的全面回答。以上是关于MySQL CREATE/DROP USER 返回 0的主要内容,如果未能解决你的问题,请参考以下文章
架构未在 hbmddl.auto = create.drop 上删除
Spring Boot 2.2.2 和“hibernate.hbm2ddl.auto=(create|create-drop|update|validate)”不起作用