itsource

MySQL CREATE/DROP USER가 0을 반환함

mycopycode 2022. 9. 13. 22:15
반응형

MySQL CREATE/DROP USER가 0을 반환함

왜?

$dbh->exec(CREATE USER 'usr'@'localhost' IDENTIFIED BY 'Pass100');

사용자가 생성되어도 0이 반환됩니까?이것은 MariaDB 10에 관한 것입니다.

PDO 문서에 따르면PDO::exec()변경 또는 삭제된 행의 수를 반환합니다.변경 또는 삭제된 행이 없으면 0입니다.

PDO::exec()은 발행한SQL 문에 의해 변경 또는 삭제된 행의 수를 반환합니다.영향을 받은 행이 없는 경우 PDO::exec()은 0을 반환합니다.

A CREATE USER/DROP USER스테이트먼트를 암묵적으로 변경합니다.mysql.user테이블은 어떤 행에도 영향을 준 것으로 등록되지 않습니다.INSERT또는DELETE진술할 수 있다, 그래서exec()0을 반환합니다.

예를 들어 명령줄에서 다음과 같이 입력합니다.

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정수 대신0, 또는 이 설정이 끝난 경우는 예외를 슬로우 합니다.$dbh위해서PDO::ERRMODE_EXCEPTION.

언급URL : https://stackoverflow.com/questions/30511407/mysql-create-drop-user-returns-0

반응형