検索

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

SQL挿入用のPHP配列のバインド

<p>SQL インジェクションを防ぐために配列をバインドしようとしています (最初の配列バインド)</p><p>これは有効なコードです: </p><p><br /> ;</p> ; <pre class="lang-php prettyprint-override"><code>if (isset($_POST['checkbox_selected'])) { $valuesArr = 配列(); foreach ($_POST['checkbox_selected'] as $key => $value) { // 配列 ID を取得して CSVOption 列の行番号を見つけます $findrow = array_search_partial($attributeid, $value); // フォームが送信されると、属性値が属性 ID に割り当てられます。 $属性 = $値; $csv = $csvcolumn[$findrow]; $valuesArr[] = "('$userid', '$feed_id', '$attribute', '$csv')"; } $sql = "マップ (user_id、feed_id、attribute_id、csvcolumn) の値に挿入します。"; $sql .= implode(',', $valuesArr); mysqli_query($conn,$sql); } </code></pre> <p>配列をバインドできないので、試してみました: </p> <pre class="brush:php;toolbar:false;">$sql = "マップ (user_id、feed_id、attribute_id、csvcolumn) の値に挿入 (?, ?, ? ,?)"; $stmt = $conn->prepare($sql); $stmt->bind_param('iiii', implode(',', $valuesArr)); $stmt->execute(); echo implode(',', $valuesArr) //('1', '1', '13', '9') //これは SQL に挿入される配列です //(user_id, feed_id,attribute_id, csvcolumn) //最初のステートメントで割り当てられた値は次のとおりです</pre> <p><br /></p>
P粉928591383P粉928591383502日前539

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

  • P粉384679266

    P粉3846792662023-08-09 13:15:28

    問題が 2 つあります:

    正しいバインド構文を使用していません。

    準備されたステートメントに複数の行を挿入しようとしています

    リーリー

    唯一のわずかな利点は、クエリ内で複数の VALUES() をラップしようとすると、暗黙的なトランザクションによってラップされることです。しかし、このアプローチには他の面でも不利な点があります。バインディング/実行ループをラップするトランザクションを明示的に開くと、同じ利点 [エラー ロールバック、IO バッチ処理] が得られると同時に、プリペアド ステートメントの利点 [単一の単純なクエリ解析、パラメータ化など] も活用できます。

    返事
    0
  • キャンセル返事