我有一个数组,其中包含一个insertId(作为键)的其他几个值;这需要以$ key =>提交。 $ value数组(例如1 => 2,1 => 3,> 5)等。
但是,当我在foreach循环中绑定参数时,我不断得到一个数组到字符串转换错误。结果我得到一行插入db(正确的键,然后是0)。
function instructorSubject()
{
$query = "INSERT into instructor_has_subject
SET instructor_id = :instructor_id,
subject_id = :id";
$last_id = $this->conn->lastInsertId();
$stmt = $this->conn->prepare($query);
//print_r($last_id);
//print_r($this->id);
if (isset($this->id) && $this->id != '') {
foreach ($_POST as $values) {
$stmt->bindParam(":instructor_id", $last_id, PDO::PARAM_INT);
$stmt->bindParam(":id", $this->id, PDO::PARAM_INT);
}
if($stmt->execute())
{
return true;
}
else
{
var_dump($stmt);
print_r($stmt->errorInfo());
return false;
}
}
}
示例数组是这样的: 插入ID:87 然后第二个数组显示为直接键=>值对(例如:) ([0] => 1 [1] => 3)
我觉得这与我在foreach中绑定的地方有关。提前感谢任何帮助。
答案 0 :(得分:1)
在聊天中与您交谈后,这是我们提出的解决方案。
function instructorSubject()
{
$query = "INSERT INTO instructor_has_subject (instructor_id, subject_id) VALUES (?,?)";
$last_id = $this->conn->lastInsertId();
$stmt = $this->conn->prepare($query);
if(!empty($this->id)) {
foreach($_POST['subject_id'] as $id) {
$stmt->execute(array(
$last_id,
$id
));
}
}
}
我认为我们改变的主要内容是将$_POST
更改为$_POST['subject_id']
。
我们还从函数中完全删除了bindParam
,而是选择了未命名的参数,并通过循环内的execute()
传递变量。