php - 在循环中完成 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();
我阅读了多个关于堆栈溢出的类似问题(向那些希望结束我的问题的人提供一些信息),但作为初学者,我不理解这些答案中的任何一个。现在,如果有人想帮忙,请做,如果有人仍然想结束这个问题,请随意做(就像你一直做的那样),但要知道,并非所有医学生在锁定期间都编码,尤其是当他们不知道编码,至少在结束我的问题之前评论我的代码中的错误,这将是一个很大的帮助。
解决方案
当您绑定每个项目时,您将绑定array_values()
. 将循环更改为...
foreach($some_array as $name => $value){
$this->stmt->bindValue(':' . $name, $value);
}
推荐阅读
- c++ - 我的程序如何从文本文件中读取多个单词作为一个字符串
- apache-superset - 如何在 Apache Superset 的单个仪表板上有多个与特定图表相关联的过滤器框?
- ksh - 无限循环?检查两台打印机是否在线或离线 - 如果关闭则发送电子邮件
- javascript - 旧浏览器中不支持的lookbehind的解决方法?
- python - 如何从 KSQL 表创建 KSQL 流
- sql-server - 无法调试 SQL Server Docker 容器 SSL 证书问题
- r - R安装在错误的地方
- python - Python 请求 - 获得头部响应
- javascript - 从另一个函数的函数内部调用处理程序
- firebase - 使用 copywith 时 Flutter Bloc 状态未更新