我一直在谷歌搜索过去几个小时的解决方案,但没有任何东西符合我的需要。如果数组具有与数据库列匹配的键,则这些insert array with keys有效,insert array如果列匹配值(将每个列绑定到一个值)以及其他类似但无法找到的值,则此方法有效任何适合我情况的东西。
我有一个通过jquery多重选择选项发布的数组,然后将其存储在$eng
中并传递给函数。
这是 var_dump $ eng (数组)的结果。
{[0] => array(3){[0] => string(5)“Games”1 =>串(5) “音乐”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 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,
主要关键(id
) )ENGINE = InnoDB DEFAULT CHARSET = utf8 AUTO_INCREMENT = 8;
答案 0 :(得分:2)
你应该使用参数(命名是可能的,但我只是使用?)作为prepare语句。我假设PDO - http://php.net/manual/en/pdo.prepare.php
$values = array_merge(array('null', $reqid), $eng[0]);
$placers = array_fill(0, count($values), '?');
$query = $this->dbh->prepare("INSERT INTO reqactivity VALUES (".implode(',', $placers.")");
$query->execute($values);
答案 1 :(得分:2)
废弃那张桌子。
如果您有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的方式改变你的查询。