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インジェクション攻撃を防ぐことができます。
-
【MySQL】EXISTSとサブクエリで別テーブルの列値と一致する行だけを抽出する方法
サブクエリとEXISTSを組み合わせるあるテーブルの列値が別のテーブルの列値と一致する場合にのみデータを取得したいときは、サブクエリとEXISTSを組み合わせると簡単に実現できます。まず、1つ目のテーブルを作成しましょう。mysql> create table DemoTable1 -> ( -> Id int, -> SubjectName varchar(20) -> )
-
PythonでMySQLのテーブルから全データを取得する方法を解説
MySQLのテーブルは、行(レコード)と列(フィールド)で構成されています。列はデータの項目(フィールド)を定義し、行は実際のデータレコードを表します。テーブルに格納されたデータは、利用するために取得する必要があります。場合によっては、テーブルからすべてのデータを一度に取得したいこともあるでしょう。テーブルからすべての行を取得するには、SELECT * ステートメントを使用します。基本構文SELECT * FROM テーブル名上記の構文における「*」は、テーブルからすべての行を取得することを意味しています。PythonでMySQLを使ってテーブルの全データを取得する手順MySQLコネクタをイン