my_bool mysql_change_user(MYSQL *mysql, const char *user, const char *password, const char *db)
説明
ユーザーを変更して、db
で指定されたデータベースが、mysql
で指定された接続でのデフォルト (現在) のデータベースになるようにします。その後のクエリーで、このデータベースは明示的なデータベース指定子を含まないテーブル参照のデフォルトになります。
mysql_change_user()
は接続されたユーザーを認証できなかったか、データベースを使用する権限を持たない場合に失敗します。この場合、ユーザーとデータベースは変更されません。
デフォルトのデータベースが必要ない場合は、NULL
の db
パラメータを渡します。
この関数は、新しい接続を確立し、再認証されたかのように、セッションの状態をリセットします。(セクション23.7.16「自動再接続動作の制御」を参照してください。)それは常に、アクティブなトランザクションの ROLLBACK
を実行し、すべての一時テーブルを閉じて削除し、ロックされているすべてのテーブルのロックを解除します。セッションシステム変数が、対応するグローバルシステム変数の値にリセットされます。プリペアドステートメントが解放され、HANDLER
変数が閉じられます。GET_LOCK()
によって取得されたロックが解放されます。これらの効果は、ユーザーが変更しなかった場合でも発生します。
戻り値
成功の場合はゼロ。エラーが発生した場合、ゼロ以外。
エラー
mysql_real_connect()
から取得する可能性があるものに加えて:
-
CR_COMMANDS_OUT_OF_SYNC
コマンドが正しくない順番で実行されました。
-
CR_SERVER_GONE_ERROR
MySQL サーバーが存在しなくなりました。
-
CR_SERVER_LOST
サーバーへの接続がクエリー中に失われました。
-
CR_UNKNOWN_ERROR
不明なエラーが発生しました。
-
ER_UNKNOWN_COM_ERROR
MySQL サーバーはこのコマンドを実装しません (古いサーバーの可能性があります)。
-
ER_ACCESS_DENIED_ERROR
ユーザーまたはパスワードが誤っています。
-
ER_BAD_DB_ERROR
データベースが存在していません。
-
ER_DBACCESS_DENIED_ERROR
ユーザーはデータベースに対するアクセス権を持っていませんでした。
-
ER_WRONG_DB_NAME
データベース名が長すぎます。
例
if (mysql_change_user(&mysql, "user", "password", "new_database"))
{
fprintf(stderr, "Failed to change user. Error: %s\n",
mysql_error(&mysql));
}