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

PHPスクリプトでMySQLテーブルのNULL値を処理するにはどうすればよいですか?

NULL値に応じたクエリの組み立て方

PHPスクリプトでは、if...else条件文を活用することで、NULL値の有無に応じたSQLクエリを動的に作成できます。NULLは通常の比較演算子(= など)では判定できないため、変数に値が設定されているかを事前にチェックし、NULLの場合はIS NULLを使用したクエリへ切り替えるのがポイントです。

サンプルデータ

ここでは、次のデータを持つテーブルtcount_tblを例に説明します。

mysql> SELECT * from tcount_tbl;
+-----------------+----------------+
| tutorial_author | tutorial_count |
+-----------------+----------------+
| mahran | 20 |
| mahnaz | NULL |
| Jen | NULL |
| Gill | 20 |
+-----------------+----------------+
4 rows in set (0.00 sec)

このテーブルには、tutorial_countがNULLのレコードと、具体的な数値が登録されているレコードが混在しています。

PHPスクリプトの例

以下のスクリプトは、外部から受け取ったtutorial_countの値をテーブル内の値と比較し、条件に合致するデータを取得して表示します。

<?php
$dbhost = 'localhost:3036';
$dbuser = 'root';
$dbpass = 'rootpassword';
$conn = mysql_connect($dbhost, $dbuser, $dbpass);

if(! $conn ) {
die('Could not connect: ' . mysql_error());
}

if( isset($tutorial_count )) {
$sql = 'SELECT tutorial_author, tutorial_count FROM tcount_tbl
WHERE tutorial_count = $tutorial_count';
} else {
$sql = 'SELECT tutorial_author, tutorial_count FROM tcount_tbl
WHERE tutorial_count IS NULL';
}

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 "Author:{$row['tutorial_author']} <br> ".
"Count: {$row['tutorial_count']} <br> ".
"--------------------------------<br>";
}
echo "Fetched data successfully\n";
mysql_close($conn);
?>

コードのポイント

  • isset($tutorial_count):変数に値が設定されているかどうかを判定します。
  • 値が設定されている場合は、=演算子を使って一致するレコードを検索します。
  • 値が設定されていない場合は、IS NULLを使ってtutorial_countがNULLのレコードを検索します。
  • 取得した結果はmysql_fetch_array()で1行ずつ取り出し、著者名とカウント数を画面に出力します。

注意点

サンプルで使用しているmysql_connect()などのmysql_*系関数は、PHP 5.5で非推奨となり、PHP 7以降では削除されています。現在の開発では、mysqli拡張モジュールまたはPDOの使用が推奨されます。また、外部からの入力値を直接クエリに埋め込むとSQLインジェクションの危険があるため、実際の運用ではプリペアドステートメントで値をバインドするようにしましょう。

  1. PHPとMySQLでENUM型の取り得る値を取得する方法

    MySQLデータベースに定義されたENUM型の列が取り得る値(選択肢)を確認したい場合、INFORMATION_SCHEMA.COLUMNSテーブルを参照することで簡単に取得できます。このテーブルにはデータベース内のすべてのテーブルや列のメタ情報が格納されており、COLUMN_TYPEカラムからENUMの定義そのものを文字列として取り出すことが可能です。 基本構文 ENUM型の候補値を取得するための基本的なSQL構文は以下の通りです。 SELECT COLUMN_TYPE AS 任意の別名 FROM INFORMATION_SCHEMA.COLUMNS WHERE T

  2. MySQLでカンマ区切りの値が格納されたテーブル内を検索する方法

    MySQLでカンマ区切りの値を検索するには カンマ区切りの値が格納されたカラムを持つテーブル内を検索するには、LIKE演算子を使用します。まずはサンプル用のテーブルを作成しましょう。 mysql> create table DemoTable675(Value text); Query OK, 0 rows affected (0.55 sec) レコードの挿入 insertコマンドを使って、テーブルにいくつかのレコードを挿入します。 mysql> insert into DemoTable675 values(10,56,49484,93993,211,4594); Query