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

标签 php mysql arrays

过去几个小时我一直在谷歌上搜索解决方案,但没有任何适合我的需要。这些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 ;

最佳答案

废弃该表。

如果您有 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/

相关文章:

javascript - 使用javascript从下面的对象中获取键值对

arrays - 使用数组中的一个索引

php - PDO 中的操作数选择

php - 如何检测是否输入了两个输入元素(例如文本字段)。(php/javascript)

sql - 如何在大 table 上快速计数?

mysql - Rails4、MySql、mysql2 编码问题

PHP - 将 12 小时格式时间转换为新时区时出现错误

php - 警告:DOMDocument::loadXML() [function.DOMDocument-loadXML]:实体 'laquo' 未在实体中定义

mysql - SELECT column_name FROM (SELECT table_name FROM TABLE_OF_TABLES)

arrays - 按最低值和最高值连接两个数组