【问题标题】:my mysql procedure already does insert, I would like to return the last inserted id我的 mysql 程序已经插入,我想返回最后插入的 id
【发布时间】:2011-08-25 03:21:49
【问题描述】:

我的程序mysql已经正确插入:

这是我调用该过程的 php 代码:

$sql = 'CALL insert_menu(?,?,?,?,?)';
        try {
                  $query = $bd->prepare($sql);
                  $query->bindParam(1,$name, PDO::PARAM_STR);
                  $query->bindParam(2,$catsup, PDO::PARAM_INT);
                  $query->bindParam(3,$level, PDO::PARAM_INT);
                  $query->bindParam(4,$link, PDO::PARAM_STR);
                  $query->bindParam(5,$title, PDO::PARAM_STR);
                  $query->execute();
        } catch (PDOException $e) {
                echo $e->getMessage();
        }

这是我的程序:

CREATE DEFINER=`root`@`localhost` PROCEDURE `insert_menu`(
IN p_cat_name VARCHAR(100),
IN p_cat_sup_cod INT,
IN p_cat_level INT,
IN p_link VARCHAR(200),
IN p_title VARCHAR(100)
)
BEGIN
IF ((p_cat_name <> '')&&(p_cat_level <> '')&&(p_link <> '')&&(p_title <> '')) THEN
INSERT INTO access (access_id,menu_descr,sup_cod,level,menu_link,menu_title)
VALUES ('',p_cat_name,p_cat_sup_cod,p_cat_level,p_link,p_title);
END IF;
END;

我希望我的程序返回到最后插入的 id 的 php... 我也不知道如何用 PDO prepare 得到结果...... 求大家帮忙,谢谢...

【问题讨论】:

    标签: php mysql database stored-procedures pdo


    【解决方案1】:

    由于您使用的是 PDO:

    try {
        $bd->prepare('SELECT LAST_INSERT_ID()');
        $bd->execute();
    } catch(PDOException $e) {
        echo $e->getMessage();
    }
    

    但这真的不需要准备,所以你可以使用:

    try {
        $results = $bd->query('SELECT LAST_INSERT_ID() as last');
        $lastID = $results[0]['last'];
    } catch(PDOException $e) {
        echo $e->getMessage();
    }
    

    【讨论】:

    • LAST_INSERT_ID() 是否需要在存储过程事务中执行以确保您获得存储过程插入的记录的 ID?
    • 两者之间有可能进行查询。正如您所提到的,您可以将两者包装在 beginTransation()commit() 中或一起执行。
    【解决方案2】:

    试试这个:

    SELECT LAST_INSERT_ID()
    

    【讨论】:

      猜你喜欢
      • 2011-11-06
      • 2014-09-06
      • 1970-01-01
      • 1970-01-01
      • 2012-01-15
      • 2013-06-15
      • 1970-01-01
      • 2014-06-19
      • 1970-01-01
      相关资源
      最近更新 更多