MySQL は、そのコンパクトさと効率的な操作により、データベース アプリケーションでの使用が増えています。 LAMP (または WAMP) 開発の重要な部分として、MySQL は PHP 開発者の注目と慎重な研究に値します。
MySQL の場合、最初に覚えておく必要があるのは、コマンドの各行がセミコロン (;) で終わることです。 PHP コードに挿入する場合は、次のセミコロンを省略するのが最善です。たとえば:
mysql_query ("INSERT INTO tablename (first_name, last_name) VALUES ('$first_name', $last_name')");
これは、PHP も行の終わりにセミコロンがあり、余分なセミコロンがあると PHP が正しく動作しない場合があるためです。構文アナライザーはそれを理解できないため、その方が良いです。それを省略します。この場合、セミコロンは省略されていますが、MySQL コマンドの実行時に PHP が自動的に追加します。
次の例を見てください:
$connection = mysql_connect("localhost", "albert", "shhh"); mysql_select_db("winestore", $connection); $result = mysql_query("SELECT cust_id, surname, firstname FROM customer", $connection); while ($row = mysql_fetch_array($result)) { echo "ID:t{$row["cust_id"]}n"; echo "Surnamet{$row["surname"]}n"; echo "First name:t{$row["firstname"]}nn"; }
関数 mysql_fetch_array() はクエリ結果の行を配列に置き、同時に 2 つの方法で参照できます。たとえば、cust_id は、メソッド: $row["cust_id"] または $row[0] の 2 つのメソッドを同時に使用できます。明らかに、前者の方が後者よりもはるかに読みやすいです。
複数テーブルの結合クエリでは、2 つの列名が同じ場合、エイリアスで区切るのが最善です:
SELECT winery.name AS wname, region.name AS rname, FROM winery, region WHERE winery.region_id = region.region_id; 列名的引用为:$row["wname"] 和 $row["rname"]
テーブル名と列名を指定するときは、列名のみを引用符で囲みます:
SELECT winery.region_id FROM winery 列名的引用为: $row["region_id"]
集計関数 参照は参照名です:
SELECT count(*) FROM customer; 列名的引用为: $row["count(*)"]
MySQL データ テーブルのフィールドにはデータ型が定義されている必要があります。約 25 のオプションがありますが、そのほとんどは簡単で、これ以上の説明は必要ありません。しかし、言及しなければならないことがいくつかあります。
TEXT はデータ型ではありませんが、書籍によってはそう記載されている場合があります。実際には「LONG VARCHAR」または「MEDIUMTEXT」である必要があります。
DATE データ型の形式は YYYY-MM-DD です (例: 1999-12-08)。 date 関数を使用すると、現在のシステム時刻を次の形式で簡単に取得できます: date("Y-m-d") さらに、DATA データ型間で減算して、時間の差を日数で取得できます:
$age = ($current_date - $birthdate);
Set SET は便利です。データ型は列挙型 ENUM に似ていますが、SET は複数の値を保存できるのに対し、ENUM は 1 つの値しか保存できない点が異なります。さらに、SET タイプは最大 64 個の事前定義値のみを持つことができますが、ENUM タイプは最大 65,535 個の事前定義値を処理できます。 64 を超える値を持つコレクションが必要な場合はどうすればよいでしょうか? 現時点では、この問題を一緒に解決するために複数のコレクションを定義する必要があります。
この関数は、mysql_query() 関数の代わりに使用できます。主な違いは、mysql_unbuffered_query() が、データベースを待機したりロックしたりせずにすぐに戻ることです。 ただし、出力結果セットのサイズが不明なため、返された行数を mysql_num_rows() 関数でチェックすることはできません。
SQL には、「 * 」と「 % 」の 2 種類のワイルドカード文字があります。さまざまな状況で使用されます。例: データベースのすべての内容を表示したい場合は、次のようにクエリできます:
SELECT * FROM dbname WHERE USER_ID LIKE '%';
ここでは、両方のワイルドカードが使用されています。これらは同じことを意味し、どちらも任意の文字列に一致しますが、異なるコンテキストで使用されます。 「 * 」はフィールド名と一致するために使用され、「 % 」はフィールド値と一致するために使用されます。もう 1 つ気づきにくいのは、LIKE キーワードではワイルドカード「%」を使用する必要があることです。 アンダースコア「_」というワイルドカード文字もあります。これは上記とは異なる意味を持ち、任意の 1 文字と一致するために使用されます。
ユーザーが何も入力せずに送信ボタンを押した場合はどうなりますか?本当に値が必要な場合は、クライアント側スクリプトまたはサーバー側スクリプトを使用してデータ検証を行うことができます。ただし、データベースでは、一部のフィールドは空白のままにすることも、何も入力することもできません。このようなレコードの場合、MySQL は値 NULL を挿入します。これがデフォルトの操作です。
(このフィールドを作成または変更するときに) フィールド定義で NOT NULL を宣言すると、MySQL はこのフィールドを空のままにし、何も入力しません。 ENUM 列挙型のフィールドの場合、NOT NULL を宣言すると、MySQL は列挙セットの最初の値をフィールドに挿入します。つまり、MySQL は、列挙セットの最初の値をこの列挙型のデフォルト値として使用します。
値が NULL のレコードと空のレコードにはいくつかの違いがあります。 % ワイルドカード文字は空のレコードと一致しますが、NULL レコードと一致することはできません。ある時点で、この区別が予期せぬ結果をもたらす可能性があります。私の経験によると、どのフィールドも NOT NULL と宣言する必要があります。このようにして、多くの SELECT クエリ ステートメントを正常に実行できます。 NULL を検索する場合は、「IS」キーワードを使用する必要があり、LIKE が正しく機能しないことに注意してください。 最後に言及すべきことは、新しいフィールドを追加または変更する前にデータベースにすでにいくつかのレコードがある場合、元のレコードに新しく追加されたフィールドの値は NULL または null になる可能性があるということです。これは MySQL のバグとみなされるため、この場合、SELECT クエリを使用する場合は特に注意する必要があります。