首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL创建/删除用户返回0

MySQL创建/删除用户返回0
EN

Stack Overflow用户
提问于 2015-05-28 15:49:39
回答 1查看 200关注 0票数 2

为什么

代码语言:javascript
复制
$dbh->exec(CREATE USER 'usr'@'localhost' IDENTIFIED BY 'Pass100');

返回0,即使创建了用户?这是与MariaDB 10。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-28 15:56:55

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

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

虽然CREATE USER/DROP USER语句隐式地修改了mysql.user表,但它并不像INSERTDELETE语句那样注册任何行,因此exec()返回零。

例如,从命令行:

代码语言:javascript
复制
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返回值视为失败或错误值。换句话说,要小心,不要使用--类似于:

代码语言:javascript
复制
// Do not do this:
if (!$dbh->exec("CREATE USER 'usr'@'localhost' IDENTIFIED BY 'Pass100'")) {
  // Handle error
}

相反,使用严格的比较===来测试FALSE返回:

代码语言:javascript
复制
if ($dbh->exec("CREATE USER 'usr'@'localhost' IDENTIFIED BY 'Pass100'") === FALSE) {
  // Handle error
}

如果在创建用户时有任何错误,例如用户已经存在,或者您缺乏创建用户的权限,MariaDB将报告该错误,导致PDO::exec()返回FALSE而不是整数0,或者如果您为PDO::ERRMODE_EXCEPTION配置了$dbh,则抛出异常。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30511407

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档