ホームページ  >  記事  >  データベース  >  PHPでMySQLデータベースを操作する場合の注意点

PHPでMySQLデータベースを操作する場合の注意点

黄舟
黄舟オリジナル
2016-12-14 09:29:111337ブラウズ

1. セミコロンの例外
MySQL の場合、最初に覚えておく必要があるのは、そのコマンドのすべての行がセミコロン (;) で終わるということですが、絶対的なものはなく、ここでも同じです。 MySQL は PHP コードに挿入されます。たとえば、次のセミコロンを省略することをお勧めします。
mysql_query ("INSERT INTO tablename (first_name, last_name)
VALUES ('$first_name', '$last_name')
" );これは、PHP もセミコロンで行を終了するため、余分なセミコロンは PHP 構文アナライザーを混乱させる場合があるため、省略することをお勧めします。この場合、セミコロンは省略されていますが、MySQL コマンドの実行時に PHP が自動的に追加します。

セミコロンを追加する必要がない別の状況もあります。通常の水平配置ではなく、垂直配置でフィールドを表示したい場合は、G を使用して SQL ステートメントの行を終了できます。この場合、セミコロンは必要ありません。例:

SELECT。 * FROM PENPALS WHERE USER_ID = 1G

2. TEXT、DATE、SET データ型

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 を超える値を含むコレクションが必要な場合はどうすればよいでしょうか?現時点では、この問題を一緒に解決するには、複数のコレクションを定義する必要があります。

3. ワイルドカード文字

SQLには「*」と「%」の2種類のワイルドカード文字があります。さまざまな状況で使用されます。例: データベースのすべての内容を表示したい場合は、次のようにクエリできます:

SELECT * FROM dbname WHERE USER_ID LIKE '%';
​​
ここでは、両方のワイルドカードが使用されています。これらは同じことを意味し、どちらも任意の文字列に一致しますが、異なるコンテキストで使用されます。 「 * 」はフィールド名と一致するために使用され、「 % 」はフィールド値と一致するために使用されます。もう 1 つ気付きにくいのは、ワイルドカード文字「%」を LIKE キーワードと一緒に使用する必要があることです。

アンダースコア「_」というワイルドカード文字もあります。これは上記とは異なる意味を持ち、任意の 1 文字と一致するために使用されます。

4. NOT NULL で空のレコード

ユーザーが何も入力せずに送信ボタンを押した場合はどうなりますか?本当に値が必要な場合は、前述したように、データ検証にクライアント側スクリプトまたはサーバー側スクリプトを使用できます。ただし、データベースでは、一部のフィールドは空白のままにすることも、何も入力することもできません。このようなレコードに対して、MySQL はいくつかのことを行います:

値 NULL を挿入します。これがデフォルトの操作です。
フィールド定義で NOT NULL を宣言した場合 (このフィールドを作成または変更するとき)、MySQL はこのフィールドを空のままにし、何も入力しません。
ENUM 列挙型フィールドの場合、NOT NULL を宣言すると、MySQL は列挙型セットの最初の値をフィールドに挿入します。つまり、MySQL は、列挙セットの最初の値をこの列挙型のデフォルト値として使用します。

値が NULL のレコードと空のレコードにはいくつかの違いがあります。 % ワイルドカード文字は空のレコードと一致しますが、NULL レコードと一致することはできません。ある時点で、この区別が予期せぬ結果をもたらす可能性があります。私の経験によると、どのフィールドも NOT NULL と宣言する必要があります。このようにして、次の SELECT クエリ ステートメントは正常に実行できます:

if (!$CITY) {$CITY = "%";}

$selectresult = mysql_query ("SELECT * FROM dbname
WHERE FIRST_NAME = ' Liu'
AND LAST_NAME = 'Rufeng'
AND CITY LIKE '$CITY'
");

最初の行で、ユーザーが CITY 値を指定しない場合、ワイルドカード文字 % が CITY 変数の代わりに使用されます。検索では、CITY フィールドが空のレコードも含め、あらゆる CITY 値が考慮されます。

しかし、CITYフィールドの値がNULLであるレコードがいくつかある場合、問題が発生します。上記のクエリではこれらのフィールドが見つかりません。この問題の解決策は次のようになります:

if (!$CITY) {$CITY = "%";}

$selectresult = mysql_query ("SELECT * FROM dbname
WHERE FIRST_NAME = 'Liu'
AND LAST_NAME = 'Rufeng'
AND (CITY LIKE '$CITY ' OR CITY IS NULL)
");

NULL を検索する場合は、「IS」キーワードを使用する必要があり、LIKE が正しく機能しないことに注意してください。

最後に言及する必要があるのは、新しいフィールドを追加または変更する前にデータベースにすでにいくつかのレコードがある場合、元のレコードに新しく追加されたフィールドの値は NULL になるか、空になる可能性があるということです。これは MySQL のバグと考えられるため、この場合、SELECT クエリを使用する場合は特に注意する必要があります。

上記は、PHP で MySQL データベースを操作する際の注意事項の内容です。その他の関連内容については、PHP 中国語 Web サイト (www.php.cn) をご覧ください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。