目次に値を挿入しようとしています。 VALUES に PHP 変數(shù)がない場(chǎng)合は正常に動(dòng)作します。ただし、変數(shù) $type
を VALUES
に入れると、機(jī)能しません。私が何を間違えたのでしょうか?
MySQL ステートメントに PHP 変數(shù)を追加するためのルールはシンプルで簡(jiǎn)単です:
このルールはクエリの 99% に適用され、クエリにも適用されます。 SQL データ リテラル (または単純に SQL 文字列または數(shù)値) を表す変數(shù)は、準(zhǔn)備されたステートメントを介して追加する必要があります。例外なく。
この方法は 4 つの基本的なステップで構(gòu)成されます:
使用
データリテラルを追加
リーリー
古いバージョンの PHP を使用している場(chǎng)合は、明示的に準(zhǔn)備/バインド/実行を行う必要があります:リーリー
このコードは少し複雑ですが、これらすべての演算子の詳細(xì)な説明は、私の記事Mysqli を使用して INSERT クエリを?qū)g行する方法 と、プロセスを大幅に簡(jiǎn)素化できるソリューションを參照してください。 。
SELECT クエリの場(chǎng)合は、上記と同じ方法を使用できます:リーリー
ただし、古いバージョンの PHP を使用している場(chǎng)合は、準(zhǔn)備/バインド/実行ルーチンを?qū)g行し、使い慣れた を取得するために get_result()
メソッドも呼び出す必要があります。 mysqli_result から、通常の方法でデータを抽出できます:
リーリー
2. ホワイトリスト フィルタリングを使用する
ホワイトリスト を通じてフィルター処理する必要があります。
キーワードや識(shí)別子 (データベース、テーブル、フィールド名) など、クエリの別の部分を表す変數(shù)を追加する必要がある場(chǎng)合があります。これはまれな狀況ですが、備えておくことが最善です。この場(chǎng)合、変數(shù)は、スクリプトに記述された値のリスト
明示的に と照合する必要があります。これについては、私の他の記事ユーザーの選択に基づいて ORDER BY 句にフィールド名を追加する:で詳しく説明しています。
これは例です:リーリー リーリー
このようなコードの後、$direction 変數(shù)と
$orderby 変數(shù)は、許可されたバリアントの 1 つと等しいか、または次のいずれかになるため、SQL クエリに安全に挿入できます。 throw エラーが発生しました。
backtick 文字で囲む必要があります。したがって、ORDER BY 例の最終的なクエリ文字列は次のようになります。
リーリー