gpt4 book ai didi

php 将未知数量的值传递给 mysql 准备好的语句

转载 作者:行者123 更新时间:2023-11-29 01:40:12 27 4
gpt4 key购买 nike

在过去的几个小时里,我一直在谷歌上搜索解决方案,但没有满足我需要的东西。这些insert array with keys如果数组具有与数据库列匹配的键,则有效,insert array如果列与值匹配(将每列绑定(bind)到一个值)和其他相似但找不到适合我的情况的列,则此方法有效。

我有一个通过 jquery 多选选项发布的数组,然后存储在 $eng 中并传递给一个函数。

这是 var_dump $eng (数组)的结果。

{ [0]=> array(3) { [0]=> string(5) "Games" 1=> string(5) "Music" 2=> string(4) "Walk" } }

数组可以有 1 到 5 个值。一切都取决于用户的选择。我想将值插入数据库中。

到目前为止,这是我的代码,如果数组计数与我的表列匹配,它就会工作,否则我会收到错误 Insert value list does not match column list出于明显的原因,我需要在准备好的声明中提出任何建议,但我就是想不通。

public function addActivity($eng, $reqid)
{

$act = implode("','",array_values($eng[0]));

$query = $this->dbh->prepare("INSERT INTO reqactivity VALUES ('NULL','$reqid','$act')");
$query->execute();

var_dump($eng);
}

这是表结构

CREATE TABLE IF NOT EXISTS reqactivity (
id int(12) NOT NULL AUTO_INCREMENT,
reqid int(12) NOT NULL,
act1 varchar(15) NOT NULL,
act2 varchar(15) NOT NULL,
act3 varchar(15) NOT NULL,
act4 varchar(15) NOT NULL,
act5 varchar(15) NOT NULL,
PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=8 ;

最佳答案

报废那张 table 。

如果您有 phpMyAdmin,请打开表,转到操作,然后删除表。现在改为这样做:

CREATE TABLE IF NOT EXISTS reqactivity (
id int(12) NOT NULL AUTO_INCREMENT,
reqid int(12) NOT NULL,
activities varchar(250) NOT NULL
PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=8 ;

然后使用它来插入您的事件。它们都在一列中,用逗号分隔。您不能只是将任何旧数据塞入任何旧列并希望有足够的或不要太多。

$query = $this->dbh->prepare("INSERT INTO reqactivity VALUES (NULL, :rid, :act)");
$query->execute(array(":rid"=>$reqid, ":act"=>$act));

不能让执行为空。请参阅手册上的 PDO。

替代方法

如果您想在不更改表格的情况下完成这项工作,您需要以某种方式确保该数组始终恰好有 5 个值。不多也不少。如果你能做到这一点,那么就按照@aland 在他的回答中提出的方式更改你的查询。

关于php 将未知数量的值传递给 mysql 准备好的语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26641895/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com