SQL挿入用のPHP配列のバインド
P粉928591383
P粉928591383 2023-08-08 15:51:43
0
1
537
<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粉928591383
P粉928591383

全員に返信(1)
P粉384679266

問題が 2 つあります:

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

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

リーリー

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

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート