将列参数绑定到 mysqli 预准备语句 [duplicate]

Binding Column Parameter to mysqli Prepared Statement [duplicate]

提问人:Richard Owens 提问时间:10/6/2021 更新时间:10/6/2021 访问量:147

问:

我正在升级一些旧的旧版mysql脚本并升级到mysqli。

我有一个表格,每个单元格中都有可编辑的表单字段,并通过 AJAX 将这些变量 (onBlur) 传递到以下页面:

$stmt = mysqli_prepare($conn, "UPDATE CONTACTS SET ? = ? WHERE CONTACTID = ? LIMIT 1");
mysqli_stmt_bind_param($stmt , "ssi", $_GET['column'], $_GET['editval'], $_GET['id']);
mysqli_stmt_execute($stmt);

阅读后,我发现您无法绑定参数以在语句中定义列,因此这给了我一个问题。

如何使用 AJAX $_GET 变量来确定哪一列需要更新?我不是特别想为每一列编写单独的 AJAX 脚本。

php ajax mysqli 预备语句

评论

2赞 user3783243 10/6/2021
您可以使用白名单来定义可能的列。
2赞 user3783243 10/6/2021
(我会使用而不是长块的条件)in_array
1赞 Richard Owens 10/6/2021
@user3783243 谢谢 - 刚刚根据您的评论找到了这个。stackoverflow.com/questions/41598080/....数组路由似乎更整洁。测试后,我将添加完整的脚本。
0赞 Richard Owens 10/6/2021
最终代码如下: - $column = $_GET['column'];定义 “白名单” $allowed = ['COMPANY', 'ACCMAN', 'FORENAME', 'SURNAME', 'DEAR', 'EMAIL', 'COMPTYPE', 'PRE', 'OPTOUT', 'OPTIN', 'OPTINDATE'];如果 (!in_array($column, $allowed)) { throw new Exception(“Invalid column name”); } $rs_update = mysqli_prepare($conn, “UPDATE CONTACTS SET $column = ?其中 CONTACTID = ?限制 1“);mysqli_stmt_bind_param($rs_update, “si”, $_GET['editval'], $_GET['id']);// 绑定参数 mysqli_stmt_execute($rs_update);// 执行查询

答: 暂无答案