![](/img/trans.png)
[英]Can not Insert record into mysql table with php prepared-statement
[英]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.