1

环境 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 中。

  1. 我曾尝试使用循环在单个存储过程中完成此过程,但没有成功。
  2. 我还尝试在第一个过程中返回 LAST INSERT ID 的值,以便在传递给第二个过程时可以使用它。

这些尝试对我来说都失败了,因为我还在学习,我有这个工作,并希望继续沿着这条路走下去。使用 phpMyAdmin 调试存储过程已经足够具有挑战性了。

谁能告诉我为什么第二次插入不会发生?我能做些什么来解决这个问题?

4

0 回答 0