Php/docs/mysqli.query

提供:Dev Guides
< Php
移動先:案内検索

mysqli::query

mysqli_query

(PHP 5, PHP 7)

mysqli::query -- mysqli_queryデータベース上でクエリを実行する


説明

オブジェクト指向型

public mysqli::query ( string $query [, int $resultmode = MYSQLI_STORE_RESULT ] ) : mixed

手続き型

mysqli_query ( mysqli $link , string $query [, int $resultmode = MYSQLI_STORE_RESULT ] ) : mixed

データベースに対してクエリ query を実行します。

DML (INSERT、UPDATE あるいは DELETE) 以外のクエリについては、 この関数は mysqli_real_query() に続けて mysqli_use_result() あるいは mysqli_store_result() をコールすることと同等です。

注意:

サーバーの max_allowed_packet よりも長いステートメントを mysqli_query() に渡した場合、 返ってくるエラーコードは MySQL Native Driver (mysqlnd) を使っているか MySQL Client Library (libmysqlclient) を使っているかで異なります。 それぞれ、次のように振る舞います。

  • Linux 上の mysqlnd では、エラーコード 1153 を返します。 エラーメッセージは “got a packet bigger than max_allowed_packet bytes” です。
  • Windows 上の mysqlnd では、エラーコード 2006 を返します。 エラーメッセージは “server has gone away” です。
  • すべてのプラットフォームの libmysqlclient では、エラーコード 2006 を返します。エラーメッセージは “server has gone away” です。

パラメータ

link

手続き型のみ: mysqli_connect() あるいは mysqli_init() が返すリンク ID。

query

クエリ文字列。

クエリ内のデータは 適切にエスケープ. する必要があります。

resultmode

定数 MYSQLI_USE_RESULT あるいは MYSQLI_STORE_RESULT で、望みの挙動を指定します。 デフォルトでは MYSQLI_STORE_RESULT を使用します。

MYSQLI_USE_RESULT を使用すると、 mysqli_free_result() をコールするまでは それ以降のコールはすべて Commands out of sync エラーを返します。

MYSQLI_ASYNC (mysqlnd で使用可能) を使用すると、クエリを非同期実行できるようになります。 このクエリの結果を取得するには mysqli_poll() を使用します。


返り値

失敗した場合に false を返します。 SELECT, SHOW, DESCRIBE あるいは EXPLAIN が成功した場合は、mysqli_query()mysqli_result オブジェクトを返します。それ以外のクエリが成功した場合は、 mysqli_query()true を返します。


例1 mysqli::query() の例

オブジェクト指向型


<?php$mysqli = new mysqli("localhost", "my_user", "my_password", "world");/* 接続状況をチェックします */if ($mysqli->connect_errno) {    printf("Connect failed: %s\n", $mysqli->connect_error);    exit();}/* テーブルを作成します。これは結果セットを返しません */if ($mysqli->query("CREATE TEMPORARY TABLE myCity LIKE City") === TRUE) {    printf("Table myCity successfully created.\n");}/* Select クエリを実行します。これは結果セットを返します */if ($result = $mysqli->query("SELECT Name FROM City LIMIT 10")) {    printf("Select returned %d rows.\n", $result->num_rows);    /* 結果セットを開放します */    $result->close();}/* 大量のデータを取得する必要がある場合は MYSQLI_USE_RESULT を使用します */if ($result = $mysqli->query("SELECT * FROM City", MYSQLI_USE_RESULT)) {    /* この結果セットが閉じられるまで、サーバーとやりとりする関数は       一切実行できないことに注意しましょう。関数をコールすると、       'out of sync' エラーが発生します */    if (!$mysqli->query("SET @a:='this will not work'")) {        printf("Error: %s\n", $mysqli->error);    }    $result->close();}$mysqli->close();?>

手続き型


<?php$link = mysqli_connect("localhost", "my_user", "my_password", "world");/* 接続状況をチェックします */if (mysqli_connect_errno()) {    printf("Connect failed: %s\n", mysqli_connect_error());    exit();}/* テーブルを作成します。これは結果セットを返しません */if (mysqli_query($link, "CREATE TEMPORARY TABLE myCity LIKE City") === TRUE) {    printf("Table myCity successfully created.\n");}/* Select クエリを実行します。これは結果セットを返します */if ($result = mysqli_query($link, "SELECT Name FROM City LIMIT 10")) {    printf("Select returned %d rows.\n", mysqli_num_rows($result));    /* 結果セットを開放します */    mysqli_free_result($result);}/* 大量のデータを取得する必要がある場合は MYSQLI_USE_RESULT を使用します */if ($result = mysqli_query($link, "SELECT * FROM City", MYSQLI_USE_RESULT)) {    /* この結果セットが閉じられるまで、サーバーとやりとりする関数は       一切実行できないことに注意しましょう。関数をコールすると、       'out of sync' エラーが発生します */    if (!mysqli_query($link, "SET @a:='this will not work'")) {        printf("Error: %s\n", mysqli_error($link));    }    mysqli_free_result($result);}mysqli_close($link);?>

上の例の出力は以下となります。


Table myCity successfully created.
Select returned 10 rows.
Error: Commands out of sync;  You can't run this command now

参考