MySQL クエリを送信する

# mysql_query

(PHP 4, PHP 5)

mysql_query — MySQL クエリを送信する

警告

この拡張モジュールは PHP 5.5.0 で非推奨になり、PHP 7.0.0 で削除されました。 MySQLi あるいは PDO_MySQL を使うべきです。詳細な情報は MySQL: API の選択 を参照ください。 この関数の代替として、これらが使えます。

- mysqli_query()
- PDO::query()

### 説明

function mysql_query(string `$query`, resource `$link_identifier` = NULL): mixed

mysql_query() は、 ひとつのクエリを送信します (複数クエリの送信はサポートしません)。 送信先は、`link_identifier` で指定したサーバー上にある、現在アクティブなデータベースです。

### パラメータ

`query`
  SQL クエリ。 クエリ文字列は、セミコロンで終えてはいけません。 クエリ内のデータは 適切にエスケープ する必要があります。
`link_identifier`
  MySQL 接続。指定されない場合、mysql_connect() により直近にオープンされたリンクが指定されたと仮定されます。そのようなリンクがない場合、引数を指定せずに mysql_connect() がコールした時と同様にリンクを確立します。リンクが見付からない、または、確立できない場合、`E_WARNING` レベルのエラーが生成されます。

### 戻り値

SELECT, SHOW, DESCRIBE や EXPLAIN 文、その他結果セットを返す文では、 mysql_query() は成功した場合に resource を返します。エラー時には `false` を返します。

それ以外の SQL 文 INSERT, UPDATE, DELETE, DROP などでは、 mysql_query() は成功した場合に `true` 、エラー時に `false` を返します。

返された結果にアクセスするためには、結果リソースを mysql_fetch_array() やその他の関数に渡します。

SELECT 文によって返された行の数を知るには mysql_num_rows() を用います。また DELETE, INSERT, REPLACE, または UPDATE 文で変更された行の数を 知るには mysql_affected_rows() を用います。

クエリが参照するテーブルにアクセスする権限がない場合も mysql_query()は失敗し、`false` が返されます。

### 例

例1 間違ったクエリ

次のクエリは文法的に間違っているので、 mysql_query()は失敗し `false`を返します。

    <?php
    $result = mysql_query('SELECT * WHERE 1=1');
    if (!$result) {
        die('Invalid query: ' . mysql_error());
    }

    ?>

例2 正しいクエリ

次のクエリは正しいので、mysql_query() は resource を返します。

    <?php
    // これはユーザーが指定する。たとえば
    $firstname = 'fred';
    $lastname  = 'fox';

    // クエリの作成
    // これは SQL クエリを実行する最良の方法です。
    // さらなる例は、mysql_real_escape_string() を参照ください。
    $query = sprintf("SELECT firstname, lastname, address, age FROM friends
        WHERE firstname='%s' AND lastname='%s'",
        mysql_real_escape_string($firstname),
        mysql_real_escape_string($lastname));

    // クエリの実行
    $result = mysql_query($query);

    // 結果のチェック
    // MySQL に送られたクエリと返ってきたエラーをそのまま表示します。デバッグに便利です。
    if (!$result) {
        $message  = 'Invalid query: ' . mysql_error() . "\n";
        $message .= 'Whole query: ' . $query;
        die($message);
    }

    // 結果の利用
    // $result をそのまま出力してもリソースの内部の情報にはアクセスできません。
    // 結果に対して MySQL の関数を適用する必要があります。
    // mysql_result(), mysql_fetch_array(), mysql_fetch_row() なども参照ください。
    while ($row = mysql_fetch_assoc($result)) {
        echo $row['firstname'];
        echo $row['lastname'];
        echo $row['address'];
        echo $row['age'];
    }

    // 結果セットに関連付けられているリソースの開放
    // これは、スクリプトが終了する際に自動的に実行されます。
    mysql_free_result($result);
    ?>

### 参考

- mysql_connect() - MySQL サーバーへの接続をオープンする
- mysql_error() - 直近に実行された MySQL 操作のエラーメッセージを返す
- mysql_real_escape_string() - SQL 文中で用いる文字列の特殊文字をエスケープする
- mysql_result() - 結果データを得る
- mysql_fetch_assoc() - 連想配列として結果の行を取得する
- mysql_unbuffered_query() - MySQL に SQL クエリを送信するが、結果に対してのフェッチやバッファリングは行わない

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open