0
我已经看过并阅读了一些关于此的问题,但我无法弄清楚发生了什么。我有一个插入到表中,然后用最后插入的ID只返回单个列(因为我执行多个statments一个SP lastInsertID()不工作。PHP返回存储过程的输出
CREATE DEFINER=`graffixnyc`@`%` PROCEDURE `createUser`(
IN userName VARCHAR(50),
IN firstName VARCHAR(25),
IN lastName VARCHAR(25),
IN pass text)
BEGIN
SELECT FLOOR(RAND() * 0xFFFFFFFF) into @salt;
INSERT INTO `users` (`username`, `first_name`,`last_name`,`salt`,`password`)
VALUES (userName, firstName,lastName, (select
@salt),sha2(concat(md5(pass(select @salt)),256));
SELECT LAST_INSERT_ID() as lastinsert;
END
现在,当我执行,这是MySQL是返回上次插入记录的值当我尝试用PHP我得到空访问它
$paramUsername = $req->params('username'); // Getting parameter with names
$paramFirstName = $req->params('firstname');
$paramLastName = $req->params('lastname');
$paramPassword = $req->params('password');
$sql = "CALL createUser(:username, :firstname,:lastname,:password)";
try {
$dbCon = getConnection();
$stmt = $dbCon->prepare($sql);
$stmt->bindParam("username", $paramUsername);
$stmt->bindParam("firstname", $paramFirstName);
$stmt->bindParam("lastname", $paramLastName);
$stmt->bindParam("password", $paramPassword);
$stmt->execute();
$row= $stmt->fetch();
$last_id=$row["lastinsert"];
$user->id =$last_id;
我一直在使用的输出Paramater像这样也试过:。
CREATE DEFINER=`graffixnyc`@`%` PROCEDURE `createUser`(
IN userName VARCHAR(50),
IN firstName VARCHAR(25),
IN lastName VARCHAR(25),
IN pass text,
OUT lastinsert INT)
BEGIN
SELECT FLOOR(RAND() * 0xFFFFFFFF) into @salt;
INSERT INTO `users` (`username`, `first_name`,`last_name`,`salt`,`password`)
VALUES (userName, firstName,lastName, (select
@salt),sha2(concat(md5(pass(select @salt)),256));
SET lastinsert=(SELECT LAST_INSERT_ID());
SELECT lastinsert;
END
$paramUsername = $req->params('username');
$paramFirstName = $req->params('firstname');
$paramLastName = $req->params('lastname');
$paramPassword = $req->params('password');
$sql = "CALL createUser(:username, :firstname,:lastname,:password,
@lastinsert)";
try {
$dbCon = getConnection();
$stmt = $dbCon->prepare($sql);
$stmt->bindParam("username", $paramUsername);
$stmt->bindParam("firstname", $paramFirstName);
$stmt->bindParam("lastname", $paramLastName);
$stmt->bindParam("password", $paramPassword);
$stmt->execute();
$row = $dbCon->query("select @lastinsert;")>fetch();
$last_id=$row["@lastinsert"];
$user->id =$last_id;
当我试着像这样我得到这个错误:
{"error":{"text":SQLSTATE[HY000]: General error: 2014 Cannot execute queries
while other unbuffered queries are active. Consider using
PDOStatement::fetchAll(). Alternatively, if your code is only ever going to
run against mysql, you may enable query buffering by setting the
PDO::MYSQL_ATTR_USE_BUFFERED_QUERY attribute.}}
所以,我试图使用fetchall,得到了相同的错误..然后我想这是我在这里找到它的作品,但因为它只有1根费尔德返回1排它doesn似乎我真的需要循环任何东西:
$stmt->execute();
$stmt = $dbCon->prepare("select @lastinsert;");
$outputArray = $dbCon->query("select @lastinsert;")->fetchAll();
foreach($outputArray as $row)
{
$last_id=$row["@lastinsert"];
}
所以,如果有更好的方式来做到这一点?我确定有。我对PHP和MySQL非常陌生,但在SQLServer方面有很多经验,所以我们将不胜感激。
你试过改为'print_r'行? – FrankerZ