MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

PHPスクリプトでMySQLのLIKE句を使ってデータを検索・取得する方法

PHPからMySQLデータベースを操作する際、WHERE...LIKE句を使用することで、特定のパターンに一致するレコードだけを柔軟に抽出できます。PHPでは、SQLコマンドを実行するための関数mysql_query()の中で、通常のSQLと同じ構文でWHERE...LIKE句を記述します。

WHERE...LIKE句をSELECTコマンドと組み合わせて使用した場合、実行結果として選択されたすべてのデータは、別のPHP関数であるmysql_fetch_array()を使って取得することができます。

一方、WHERE...LIKE句をDELETEやUPDATEコマンドと一緒に使う場合は、データの取得が発生しないため、これらの追加の関数呼び出しは不要です。クエリの実行だけで処理が完了します。

具体的な例

ここでは、「tutorial_tbl」というテーブルから、著者名(author)に「jay」という文字列が含まれるすべてのレコードを取得して表示するPHPスクリプトの例を紹介します。

<?php
   $dbhost = 'localhost:3036';
   $dbuser = 'root';
   $dbpass = 'rootpassword';
   $conn = mysql_connect($dbhost, $dbuser, $dbpass);
   
   if(! $conn ) {
      die('Could not connect: ' . mysql_error());
   }
   
   $sql = 'SELECT tutorial_id, tutorial_title,
      tutorial_author, submission_date
      FROM tutorials_tbl
      WHERE tutorial_author LIKE "%jay%"';
     
   mysql_select_db('TUTORIALS');
   $retval = mysql_query( $sql, $conn );

   if(! $retval ) {
      die('Could not get data: ' . mysql_error());
   }
   
   while($row = mysql_fetch_array($retval, MYSQL_ASSOC)) {
      echo "Tutorial ID :{$row['tutorial_id']} <br> ".
         "Title: {$row['tutorial_title']} <br> ".
         "Author: {$row['tutorial_author']} <br> ".
         "Submission Date : {$row['submission_date']} <br> ".
         "--------------------------------<br>";
   }
   echo "Fetched data successfully\n";
   mysql_close($conn);
?>

コードのポイント

  • LIKE "%jay%":ワイルドカード「%」を前後に付けることで、著者名のどこかに「jay」が含まれるレコードをすべて対象にしています。
  • mysql_fetch_array($retval, MYSQL_ASSOC):結果セットを連想配列として1行ずつ取得し、whileループで全レコードを順番に出力します。
  • mysql_close($conn):処理が完了したら、データベース接続を明示的に閉じてリソースを解放します。

注意点:mysql_*系関数は非推奨

上記の例で使用しているmysql_connect()やmysql_query()などのmysql_*系関数は、現在では非推奨(deprecated)となり、PHP 7以降では完全に削除されています。実際の開発では、より安全でモダンなmysqli拡張モジュールまたはPDO(PHP Data Objects)の使用が推奨されます。特にユーザー入力をクエリに含める場合は、プリペアドステートメントを利用することでSQLインジェクション攻撃を防ぐことができます。

  1. 【MySQL】EXISTSとサブクエリで別テーブルの列値と一致する行だけを抽出する方法

    サブクエリとEXISTSを組み合わせるあるテーブルの列値が別のテーブルの列値と一致する場合にのみデータを取得したいときは、サブクエリとEXISTSを組み合わせると簡単に実現できます。まず、1つ目のテーブルを作成しましょう。mysql> create table DemoTable1     -> (     -> Id int,     -> SubjectName varchar(20)     -> )

  2. PythonでMySQLのテーブルから全データを取得する方法を解説

    MySQLのテーブルは、行(レコード)と列(フィールド)で構成されています。列はデータの項目(フィールド)を定義し、行は実際のデータレコードを表します。テーブルに格納されたデータは、利用するために取得する必要があります。場合によっては、テーブルからすべてのデータを一度に取得したいこともあるでしょう。テーブルからすべての行を取得するには、SELECT * ステートメントを使用します。基本構文SELECT * FROM テーブル名上記の構文における「*」は、テーブルからすべての行を取得することを意味しています。PythonでMySQLを使ってテーブルの全データを取得する手順MySQLコネクタをイン