爲什麼是它MySQL的CREATE/DROP USER返回0
$dbh->exec(CREATE USER 'usr'@'localhost' IDENTIFIED BY 'Pass100');
返回0,即使在創建用戶?這與MariaDB 10.
爲什麼是它MySQL的CREATE/DROP USER返回0
$dbh->exec(CREATE USER 'usr'@'localhost' IDENTIFIED BY 'Pass100');
返回0,即使在創建用戶?這與MariaDB 10.
根據the PDO docs,PDO::exec()
返回修改或刪除的行數,如果沒有,則返回零。
PDO :: exec()返回您發佈的SQL語句修改或刪除的行數。如果沒有行受到影響,PDO :: EXEC()返回0
一個CREATE USER/DROP USER
聲明,但它隱含修改mysql.user
表不註冊爲具有影響的任何行作爲INSERT
或DELETE
語句會,等exec()
返回零。
例如從命令行:
MariaDB [(none)]> CREATE USER [email protected];
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> DROP USER [email protected];
Query OK, 0 rows affected (0.00 sec)
所以0
返回值不應被理解爲一個故障或falsy值處理。換句話說,要小心不要使用像一個表達式:
// 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
而不是整數0
,或者如果您已配置則拋出異常for PDO::ERRMODE_EXCEPTION
。
@MichelBerkowski - 感謝您的全面回答。 – DroidOS
@DroidOS很高興幫助,歡呼聲。 –
_「PDO :: exec()返回你發出的SQL語句修改或刪除的行數,如果沒有行受到影響,PDO :: exec()返回0。 「CREATE USER」語句是一個不影響任何行的語句,儘管可能會隱式修改mysql數據庫。 http://php.net/manual/en/pdo.exec.php –
我想這應該是一個答案。請繼續,我會在下面發佈。 –