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