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