首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将我的PHP预先循环的SQL-Insert更改为准备语句SQL循环?

如何将我的PHP预先循环的SQL-Insert更改为准备语句SQL循环?
EN

Stack Overflow用户
提问于 2019-02-21 09:15:01
回答 3查看 636关注 0票数 0

我有一个循环的查询要做,插入到MySQL数据库中--它完美地完成了我需要它做的事情,因为它在数组中接收所有用户的输入,然后将它们循环并输入到数据库中的自己的行中。

代码语言:javascript
复制
$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注入攻击,所以我一直试图通过使用准备好的语句来防止这种情况--我尝试的每个版本都是循环attacks,它只上传数组中的最后一项。

代码语言:javascript
复制
$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();

我认为这可能与将它从前端循环中的.=更改为->bind_param有关,因为这可能会剥夺循环它的机会吗?我不太确定,也不知道我该如何回应,我试着回音$stmtracemethod _tostring is not implemented

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-02-21 09:34:41

代码语言:javascript
复制
foreach ($vracehistory as $kay => $value) {
    $stmtrace->bind_param("sss", $inserted_id, $value, $results[$kay]);
    $stmtrace->execute();
}
票数 3
EN

Stack Overflow用户

发布于 2019-02-21 09:22:55

应该将execute()放在循环中。

票数 0
EN

Stack Overflow用户

发布于 2019-02-21 09:28:04

将params绑定到foreach循环之外,并在分配foreach循环中的变量时分配和执行查询。例如

代码语言:javascript
复制
$stmtrace->bind_param("sss", $insertId, $insertValue, $insertKey);
foreach ($vracehistory as $kay => $value) {
    $insertId = inserted_id;
    $insertValue = $value;
    $insertKey = $kay;
    $stmtrace->execute();
}

另一个注意事项,如果绑定一个整数,bind_param方法的值应该是'i‘。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54803271

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档