int mysql_stmt_prepare(MYSQL_STMT *stmt, const char *stmt_str, unsigned long length)
説明
mysql_stmt_init()
によってステートメントハンドルが返されるとすると、文字列 stmt_str
によって指示される SQL ステートメントを準備し、ステータス値を返します。文字列の長さは length
引数によって指定してください。文字列は 1 つの SQL ステートメントで構成されている必要があります。ステートメントに終端のセミコロン (「;
」) または \g
を追加しないでください。
アプリケーションでは、疑問符 (?
) 文字を SQL 文字列の適切な位置に埋め込むことによって、1 つまたは複数のパラメータマーカーを SQL ステートメントに含めることができます。
マーカーは SQL ステートメント内の特定の場所でのみ正当です。たとえば、それらは、INSERT
ステートメントの VALUES()
リスト (行のカラム値を指定するため) で、または比較値を指定するために WHERE
句内のカラムとの比較で使用できます。ただし、それらは識別子 (テーブルまたはカラム名など)、または =
等号などのバイナリ演算子の両方のオペランドに指定するために使用できません。パラメータの型を判断することは不可能な場合があるため、後者の制限は必要です。一般に、パラメータは Data Manipulation Language (DML) ステートメント内でのみ正当で、Data Definition Language (DDL) ステートメント内では許可されません。
パラメータマーカーは、ステートメントを実行する前に mysql_stmt_bind_param()
を使用してアプリケーション変数にバインドされている必要があります。
プリペアドステートメントによって参照されているテーブルやビューのメタデータの変更が検出され、それが次に実行されるときに、ステートメントが自動再準備されます。詳細については、セクション8.9.4「プリペアドステートメントおよびストアドプログラムのキャッシュ」を参照してください。
戻り値
成功の場合はゼロ。エラーが発生した場合、ゼロ以外。
エラー
-
CR_COMMANDS_OUT_OF_SYNC
コマンドが正しくない順番で実行されました。
-
CR_OUT_OF_MEMORY
メモリー不足。
-
CR_SERVER_GONE_ERROR
MySQL サーバーが存在しなくなりました。
-
CR_SERVER_LOST
クエリー中にサーバーへの接続が失われました。
-
CR_UNKNOWN_ERROR
不明なエラーが発生しました。
準備操作が成功しなかった (つまり、mysql_stmt_prepare()
はゼロ以外を返す) 場合、mysql_stmt_error()
を呼び出して、エラーメッセージを取得できます。
例
セクション23.7.11.10「mysql_stmt_execute()」の例を参照してください。