环境 PHP 5.3.5 phpMyAdmin 3.3.9
我有两个程序,一个完成直接的双插入。第二个过程循环并调用数组的每个值,该数组基于第一个存储过程调用 LAST INSERT ID 值,因为该表具有自动增量 id 列。
由于某种原因,对第二个过程的多次调用仅存储数组的第一个 v 值。我无法获取要存储的数组中的第二个值。
第一个过程是这样的:
DELIMITER $$
CREATE PROCEDURE proc1(
IN varData1 LONGTEXT,
IN userID BIGINT(20)
)
BEGIN
INSERT INTO table1 (datetime_created) VALUES (NOW());
INSERT INTO table2 (ID, userID, data, date_created)
VALUES (LAST_INSERT_ID(), userID, varData1, NOW());
END
DELIMITER;
第二个程序是这样的:
DELIMITER $$
CREATE PROCEDURE proc2(
IN ID2 BIGINT(20)
)
BEGIN
INSERT INTO relationshipMany2ManyTable(id1, id2) VALUES (LAST_INSERT_ID(), ID2);
END
DELIMITER;
从 PHP 我这样调用每个过程:
$model->proc1($pmTextArea, $userID);
$model->proc2($commaSeparatedArray);
proc1的详细功能我就略过,它可以工作,上面显示了存储过程。proc2 适用于第一次执行,但后续执行似乎不起作用。
public function proc2($String_array)
{
try {
$value_array = explode(",", $String_array);
foreach($value_array AS $value)
{
$statement = $this->_dbh->prepare("Call proc2(?)");
$statement->bindParam(1, trim($value));
echo 'bind value '.$value.' to table';
$statement->execute();
}
}
catch(PDOException $e) {
echo $e->getMessage();
}
}
如果我传递给 proc2 的字符串数组是:
"1, 2, 3"
我看到回声语句是:
bind value 1 to table
bind value 2 to table
bind value 3 to table
但只插入第一个值。未插入其他值。我对此很陌生,尤其是存储过程。我相信它必须处理 LAST INSERT ID,但这与最后一个具有自动增量值的表有关,该表位于 proc1 的 table2 中。
- 我曾尝试使用循环在单个存储过程中完成此过程,但没有成功。
- 我还尝试在第一个过程中返回 LAST INSERT ID 的值,以便在传递给第二个过程时可以使用它。
这些尝试对我来说都失败了,因为我还在学习,我有这个工作,并希望继续沿着这条路走下去。使用 phpMyAdmin 调试存储过程已经足够具有挑战性了。
谁能告诉我为什么第二次插入不会发生?我能做些什么来解决这个问题?