我的问题是: 我创建了一个从 php 到 mysql 的存储过程。现在,在有人谈论这种做法之前,该程序运行良好。 问题是这样的,当我从 php 调用该过程并且我知道已经输入了一条记录时,mysql_insert_id() 返回 0...有什么想法吗?
哦,是的,我的 id 字段是 AUTO_INCREMENT 和 PRIMARY KEY
附注 如果这里有一种简单的方法来格式化我的代码,请告诉我。我把 pre 放在了 html 里,但是好像效果不是很好。
提前联系。
$PROCEDURE_INSERT_UPDATE_BOARD = " CREATE PROCEDURE InsertUpdateBoard(IN `pNewBoardUUID` CHAR(36), IN `pOldBoardUUID` CHAR(36), IN `pSimName` VARCHAR(40), IN `pOwnerName` VARCHAR(64), IN `pOwnerUUID` CHAR(36), IN `pLandmark` VARCHAR(80), IN `pVersion` VARCHAR(10), IN `pManagerUUID` CHAR(36), IN `pBoardURL` CHAR(80), IN `pPassword` CHAR(8)) BEGIN CALL InsertUpdateSims(`pSimName`); CALL InsertUpdateAvatars(`pOwnerName`, `pOwnerUUID`); INSERT INTO boards(`boardUUID`, `simId`, `ownerId`, `landmark`, `version`, `managerId`, `boardURL`, `password`) VALUES(`pOldBoardUUID`, (SELECT rS.id FROM 2starsglobal.sims AS rS WHERE rS.name=`pSimName`), (SELECT rA.id FROM 2starsglobal.avatars AS rA WHERE rA.UUID = `pOwnerUUID`), `pLandmark`, `pVersion`, (SELECT rA2.id FROM 2starsglobal.avatars AS rA2 WHERE rA2.UUID = `pManagerUUID`), `pBoardURL`, `pPassword`) ON DUPLICATE KEY UPDATE `boardUUID`=`pNewBoardUUID`, `landmark`=`pLandmark`, `version`=`pVersion`, `boardURL`=`pBoardURL`; END ";
And the Php code
function InsertUpdateBoard($boardNewUUID, $boardOldUUID, $simName,
$ownerName, $ownerUUID, $boardLandmark,
$versionNumber, $managerUUID, $boardURL)
{
$password = generatePassword(8);
$query = "CALL InsertUpdateBoard('$boardNewUUID', '$boardOldUUID', '$simName',
'$ownerName', '$ownerUUID', '$boardLandmark',
'$versionNumber', '$managerUUID', '$boardURL',
'$password')";
mysql_query($query) or die("ERROR:QUERY_FAILED " . mysql_error());
if(mysql_affected_rows() > 0)
{
if(mysql_insert_id() > 0)
{
echo "SUCCESS,$password";
}
else
{
echo "SUCCESS";
}
}
else
{
echo 'FAILED:BOARD_REGISTRATION_UPDATE';
}
}
最佳答案
用谷歌十秒找到this page
Note that if you Call a MySQL stored procedure to insert a new record and then reference $db->insert_id; you will get 0 back, not the last inserted ID.
It is therefore necessary to add a line to your MySQL Stored Procedure such as
select last_insert_id() as intRecordKey;
after the insert so that the query will return the new key value.
关于mysql - 存储过程和 mysql_insert_id 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12759023/