ホームページ  >  に質問  >  本文

MySQL ステートメントに PHP 変数を含める方法

<p>目次に値を挿入しようとしています。 VALUES に PHP 変数がない場合は、正常に動作します。変数 <code>$type</code> を <code>VALUES</code> に入れると、これは機能しません。私が何を間違えたのでしょうか? </p> <pre class="brush:php;toolbar:false;">$type = 'テスト'; mysql_query("INSERT INTO コンテンツ (タイプ、レポーター、説明) VALUES($type, 'john', 'whatever')");</pre> <p><br /></p>
P粉738248522P粉738248522395日前531

全員に返信(2)返信します

  • P粉949848849

    P粉9498488492023-08-24 16:07:56

    SQL インジェクションを回避するには、be を使用してステートメントを挿入します

    リーリー

    返事
    0
  • P粉883223328

    P粉8832233282023-08-24 15:43:16

    MySQL ステートメントに PHP 変数を追加するためのルールはシンプルで簡単です:

    ###1。プリペアドステートメントを使用する

    このルールは、クエリ、特にあなたのクエリの 99% をカバーします。

    SQL データ リテラル (または単に SQL 文字列または数値) を表す変数は、準備されたステートメントを介して追加する必要があります。 ###例外なく###。 この方法には 4 つの基本的な手順が含まれます

    SQL ステートメント内のすべての変数を

    プレースホルダー
    • に置き換えます。 準備
    • 結果クエリ
    • 変数をプレースホルダーにバインド
    • 実行クエリ
    • 一般的なすべての PHP データベース ドライバーを使用してこれを行う方法は次のとおりです:
    • 使用
    mysqli

    データテキストを追加

    現在の PHP バージョンでは、1 回の呼び出しで準備/バインド/実行が可能です: リーリー 古いバージョンの PHP を使用している場合は、準備/バインド/実行を明示的に行う必要があります:
    リーリー

    コードは少し複雑ですが、これらすべての演算子の詳細な説明は、私の記事

    Mysqli を使用して INSERT クエリを実行する方法

    と、プロセスを大幅に簡素化するソリューションにあります。

    SELECT クエリの場合は、上記と同じ方法を使用できます: リーリー ただし、古いバージョンの PHP を使用している場合は、準備/バインド/実行ルーチンを実行し、使い慣れた

    mysqli_result を取得するために

    get_result()

    メソッドへの呼び出しを追加する必要があります。

    通常の方法でデータを取得できます: リーリー PDO を使用してデータ テキストを追加する< code> リーリー PDO ではバインド部分と実行部分を組み合わせることができ、非常に便利です。 PDO は名前付きプレースホルダーもサポートしており、これが非常に便利だと考える人もいます。

    ###2。ホワイトリストフィルタリングを使用する
    SQL キーワード、テーブルまたはフィールド名、演算子などのその他のクエリ部分は、

    ホワイトリスト

    によってフィルタリングする必要があります。

    キーワードや識別子 (データベース、テーブル、フィールド名) など、クエリの別の部分を表す変数を追加する必要がある場合があります。このような状況はまれですが、備えておくことが最善です。

    この場合、変数は、スクリプトに記述された値のリスト 明示的に

    と照合する必要があります。私の他の記事

    ユーザーの選択に基づいて ORDER BY 句にフィールド名を追加する

    では、次のことについて説明しています:

    これは例です: リーリー リーリー このようなコードの後は、$direction

    変数と

    $orderby

    変数の両方を安全に SQL クエリに入れることができます。これらは、許可されているバリアントの 1 つと等しいか、または次のいずれかになるためです。エラーがスローされます。

    識別子について最後に述べておきたいのは、識別子も特定のデータベース構文に従ってフォーマットする必要があるということです。 MySQL の場合は、識別子の前後に バッククォート 文字を付ける必要があります。したがって、注文例の最終的なクエリ文字列は になります。 リーリー

    返事
    0
  • キャンセル返事