【发布时间】:2014-07-08 00:12:46
【问题描述】:
我已经看到这个问题被问了很多次,但它们都很长,我无法理解他们在做什么......所以,有人可以告诉我如何得到使用 PDO 将这个过程中的LAST_INSERT_ID() 转换为 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;
但是,对于比我有更多脑细胞的人来说,这可能很明显,这是行不通的。任何帮助表示赞赏。
关于我为什么认为这应该有效的参考:
【问题讨论】:
-
您可能希望使用 bindparam 而不是 bindvalue。 bindparam 通过引用获取变量,这将允许语句将值设置回变量中。 php.net/manual/en/pdostatement.bindparam.php
-
是的,试过了,没用
-
所以,
bindParam似乎正在尝试工作,因为我现在没有收到$returnid not set错误......但它仍然没有echo任何东西跨度> -
在手册中说:
length: Length of the data type. To indicate that a parameter is an OUT parameter from a stored procedure, you must explicitly set the length. -
不……那也没用……我已经更新了我的帖子以反映我的尝试