| 
                         我已经看到这个问题被问了很多次,但是他们都很长,我只是无法理解他们正在做的事情……所以,有人能告诉我如何获得LAST_INSERT_ID( )从这个程序到使用PDO的php: 
表: 
CREATE TABLE names (
    ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY,name varchar(50) NOT NULL
)
 
程序: 
CREATE DEFINER=`root`@`localhost` PROCEDURE `simpleProcedure`(newname varchar(50),OUT returnid INT(11))
BEGIN
    INSERT INTO names (name) VALUES (newname);
    SET returnid = LAST_INSERT_ID();
END
 
PHP代码我试过: 
$stmt=$db->prepare("CALL simpleProcedure(:name,:returnid)");
$stmt->bindValue(':name',$name,PDO::PARAM_STR);
$stmt->bindParam(':returnid',$returnid,PDO::PARAM_INT,11);
$stmt->execute();
echo $returnid;
 
但是,对于脑细胞比我更多的人来说,这可能是显而易见的.任何帮助赞赏. 
参考我认为这应该工作的原因: 
http://www.php.net/pdo.prepared-statements(示例#4)
最佳答案
事实证明,这是一个已经持续了很长时间的错误…自2005年以来! 
这是最初的错误报告:2005 through to 2013.这是新的错误报告:From 2013 to the present. 
有多种方法可以获得答案,我找到了其中一个并证明了这一点…… 
‘技巧’是从’mysql’程序获取输出.这是一个“两个阶段”的过程. 
>第一部分是使用您的输入运行过程,并告诉它存储结果的MYSQL变量. >然后,运行单独的查询以“选择”那些“mysql”变量. 
这里有相当清楚的描述:php-calling-mysql-stored-procedures 
更新(2017年1月): 
这是一个示例,显示了’IN’,’INOUT’和’OUT’Mysql过程参数的变量的使用. 
在我们开始之前,有一些提示: 
>开发时:在“模拟模式”下运行PDO,因为它在确定过程调用中的错误时更可靠. >仅将PHP变量绑定到过程’IN’参数. 
当您尝试将变量绑定到INOUT和OUT参数时,您将获得一些非常奇怪的运行时错误. 
像往常一样,我倾向于提供比所需更多的评论;  –  / 
运行时环境(XAMPP): 
> PHP:5.4.4 > Mysql:5.5.16 
源代码: 
> SQL Procedure > PHP with output 
SQL代码: 
CREATE PROCEDURE `demoSpInOutSqlVars`(IN     pInput_Param  INT,/* PHP Variable will bind to this*/   
                                      /* --- */  
                                      INOUT  pInOut_Param  INT,/* contains name of the SQL User variable that will be read and set by mysql */
                                      OUT    pOut_Param    INT) /* contains name of the SQL User variable that will be set by mysql */
BEGIN
    /*
     * Pass the full names of SQL User Variable for these parameters. e.g. '@varInOutParam'
     * These 'SQL user variables names' are the variables that Mysql will use for:
     *    1) finding values
     *    2) storing results
     *
     * It is similar to 'variable variables' in PHP.  
     */
     SET pInOut_Param      := ABS(pInput_Param) + ABS(pInOut_Param); /* always positive sum  */
     SET pOut_Param        := ABS(pInput_Param) * -3;                /* always negative * 3  */ 
END$$
 
PHP代码: 
数据库连接: 
$db = appDIC('getDbConnection','default'); // get the default db connection
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES,true);    
$db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE,PDO::FETCH_ASSOC);
 
注意:输出与EMULATE_PREPARES = false相同. 
设置将使用的所有PHP变量: 
$phpInParam     = 5;                  
$phpInOutParam  = 404;          /* PHP InOut variable  ==> read and should be changed  */
$phpOutParam    = null;         /* PHP Out   variable  ==> should be changed           */
 
定义并准备SQL过程调用: 
$sql = "call demoSpInOut(:phpInParam,@varInOutParam,/* mysql variable name will be read and updated */
                         @varOutParam)"; /* mysql variable name that will be written to  */
$stmt = $db->prepare($sql);
 
绑定PHP变量并设置SQL变量: 
> 1)绑定PHP变量 
$stmt-> bindParam(‘:phpInParam’,$phpInParam,PDO :: PARAM_INT); > 2)设置SQL用户INOUT变量 
$db-> exec(“SET @varInOutParam = $phpInOutParam”); //这是安全的,因为它只是将值设置为MySql变量. 
执行程序: 
$allOk = $stmt->execute();
 
将SQL变量放入PHP变量中: 
$sql = "SELECT @varInOutParam AS phpInOutParam,@varOutParam   AS phpOutParam
        FROM dual";
$results = current($db->query($sql)->fetchAll());
$phpInOutParam = $results['phpInOutParam'];
$phpOutParam   = $results['phpOutParam'];
 
注意:也许不是最好的方法;  –  / 
显示PHP变量 
"$phpInParam:"     => "5"
"$phpInOutParam:"  => "409"
"$phpOutParam:"    => "-15"
                         (编辑:莱芜站长网) 
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! 
                     |