簡體   English   中英

如何將我的PHP foreach循環SQL插入更改為准備語句SQL循環?

[英]How to change my PHP foreach looped SQL-Insert into a prepared-statement SQL loop?

我有一個循環查詢來插入到MySQL數據庫中,它完美地完成了我需要做的事情,因為它將所有用戶輸入都放在數組中,然后循環並將它們輸入到數據庫中自己的行中。

$sql_insert_race_history = "INSERT INTO inf_race_history 
                                    (`inf_id`,`race_history`, `results`) 
                            VALUES ";

if ($vracehistory != '') {
    foreach ($vracehistory as $kay => $value) {
        // $sql .= '' | $sql = $sql . '';
        $sql_insert_race_history .= "('$inserted_id','{$value}','{$results[$kay]}'),";
    }
} else {
    $vracehistory = '';
}
// remove last `,` into query;
$sql_insert_race_history = rtrim($sql_insert_race_history, ',');
$countRow = count($_POST['racehist']);
//INSERT INTO THE DATABASE VIA QUERY
$results_racehistory = mysqli_query($vconn, $sql_insert_race_history);

這段代碼可以正常工作並根據需要插入所有內容,但是有人告訴我它很容易受到SQL注入攻擊的侵害,因此我一直在嘗試通過使用准備好的語句來防止這種情況,到目前為止,我嘗試的每個版本只會循環不起作用的內容,並且只會上傳數組中的最后一項

$stmtrace = $conn->prepare("INSERT INTO inf_race_history 
                                   (`inf_id`,`race_history`, `results`) 
                            VALUES (?,?,?)");
if ($vracehistory != '') {
    foreach ($vracehistory as $kay => $value) {
        $stmtrace->bind_param("sss", $inserted_id,$value,$results[$kay]);
    }
} else {
    $vracehistory = '';
}
// remove last `,` into query;
$sql_insert_race_history = rtrim($stmtrace, ',');
$countRow = count($_POST['racehist']);
//INSERT INTO THE DATABASE VIA QUERY
$stmtrace->execute();

我認為這可能與將其從foreach循環中的.=更改為->bind_param因為這可能會剝奪循環的機會? 即時消息不是很確定,我也將如何回應$stmtrace它說method _tostring is not implemented

foreach ($vracehistory as $kay => $value) {
    $stmtrace->bind_param("sss", $inserted_id, $value, $results[$kay]);
    $stmtrace->execute();
}

您應該將execute()放入循環內。

在foreach循環外綁定參數,並在foreach循環內分配變量時分配並執行查詢。 例如

$stmtrace->bind_param("sss", $insertId, $insertValue, $insertKey);
foreach ($vracehistory as $kay => $value) {
    $insertId = inserted_id;
    $insertValue = $value;
    $insertKey = $kay;
    $stmtrace->execute();
}

另請注意,如果您綁定整數,bind_param方法的值應為'i'。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM