首页 > 解决方案 > 在循环中完成 bindValue() 后无法执行 () 查询,但在为表中的每个列名独立运行 bindValue 时执行

问题描述

我有两个代码块,用于相同的目的(根据我),但后者不能按预期工作。以下代码按照设计的方式执行。所有更改都按预期反映在数据库中。

$sql = 'INSERT INTO lesson_plan (class_date, v_id_lp) VALUES(:class_date, :v_id_lp)';
$this->query_new($sql);
$class_date_string = 'class_date';
$id_string = 'v_id_lp';
$class_date = '05-May-2020';
$id = '6';
$this->stmt->bindValue(':' . $class_date_string, $class_date);
$this->stmt->bindValue(':' . $id_string, $id);
$this->stmt->execute();

但是与我的应用程序中的其他查询相比,上面提到的列名table_name只是浩瀚海洋中的一滴水,我不想像bindValue()上面那样重复重写所有内容。因此,我划分(或尝试)循环,从昨天下午开始我一直在尝试工作,但没有成功。以下代码返回错误Warning: PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: parameter was not defined in 'File path' on 'line number'.

$sql = 'INSERT INTO lesson_plan (class_date, v_id_lp) VALUES(:class_date, :v_id_lp)';
$this->query_new($sql);
$some_array = ['class_date' => '06-May-2020','id' => '6'];
foreach(array_keys($some_array) as $string){
            $this->stmt->bindValue(':' . $string, array_values($some_array));
        }
$this->stmt->execute();

我阅读了多个关于堆栈溢出的类似问题(向那些希望结束我的问题的人提供一些信息),但作为初学者,我不理解这些答案中的任何一个。现在,如果有人想帮忙,请做,如果有人仍然想结束这个问题,请随意做(就像你一直做的那样),但要知道,并非所有医学生在锁定期间都编码,尤其是当他们不知道编码,至少在结束我的问题之前评论我的代码中的错误,这将是一个很大的帮助。

标签: phppdo

解决方案


当您绑定每个项目时,您将绑定array_values(). 将循环更改为...

foreach($some_array as $name => $value){
    $this->stmt->bindValue(':' . $name, $value);
}

推荐阅读