【问题标题】:Using POST array to select elements in mysql query使用 POST 数组在 mysql 查询中选择元素
【发布时间】:2017-03-15 06:33:10
【问题描述】:

我正在尝试创建一个$mysqli->prepare 语句,而不是使用我拥有的POST 值作为值,我想使用它们来选择我正在更新的元素。该数组来自上一页上的一组多选 html 项。

foreach($_POST['times'] as $val){

    if(!($stmt = $mysqli->prepare("UPDATE stud_sched SET ? ='a' WHERE s_id = (?)"))) {
        echo "Prepare failed: "  . $stmt->errno . " " . $stmt->error;
    }
    if(!($stmt->bind_param("sd",$val, $pid))){
        echo "Bind failed: "  . $stmt->errno . " " . $stmt->error;
    }
    if(!$stmt->execute()){
        echo "Execute failed: "  . $stmt->errno . " " . $stmt->error;
    }
        $stmt->close();
}

但是,我得到以下信息:

注意:试图在第 107 行(绑定语句)的 /nfs/stak/students/s/searsjo/public_html/student_added.php 中获取非对象的属性

准备失败:致命错误:在第 109 行的 /nfs/stak/students/s/searsjo/public_html/student_added.php 中的布尔值上调用成员函数 bind_param()

这似乎是我应该能够做到的,但我找不到任何有关它的信息。有人有什么建议吗?

谢谢!

【问题讨论】:

  • 你不能绑定字段名,over。

标签: php mysql arrays mysqli


【解决方案1】:

official documentation 没有声明可以将列名绑定到变量/值。根据interesing comment,建议例如使用in_array 将查询中允许的列名列入白名单。所以你的代码可能看起来像这样:

foreach($_POST['times'] as $column){

    if(!in_array($column, array('someColumn', 'someOtherColumn', 'yetAnotherColumn')))
    {
        die("Column not permitted in query");
    }

    if(!($stmt = $mysqli->prepare("UPDATE stud_sched SET $column ='a' WHERE s_id = (?)"))) {
        echo "Prepare failed: "  . $stmt->errno . " " . $stmt->error;
    }

    if(!($stmt->bind_param("s",$pid))){
        echo "Bind failed: "  . $stmt->errno . " " . $stmt->error;
    }

    if(!$stmt->execute()){
        echo "Execute failed: "  . $stmt->errno . " " . $stmt->error;
    }

    $stmt->close();
}

【讨论】:

  • 完美运行!
  • 很高兴为您提供帮助:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-14
  • 1970-01-01
  • 2014-04-18
  • 1970-01-01
  • 1970-01-01
  • 2021-03-04
相关资源
最近更新 更多