私の問題は次のとおりです。php から mysql へのストア プロシージャを作成しました。誰かがその練習について何か言う前に、手順はうまくいきます。問題はこれです.phpからプロシージャを呼び出し、レコードが入力されたことを知っている場合、mysql_insert_id()は0を返します...理由はありますか?
ああ、はい、私の id フィールドは AUTO_INCREMENT と PRIMARY KEY です
ps ここで私のコードをフォーマットする簡単な方法があれば、教えてください。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))
始める
CALL InsertUpdateSims(`pSimName`);
CALL InsertUpdateAvatars(`pOwnerName`, `pOwnerUUID`);
INSERT INTO ボード(`boardUUID`, `simId`, `ownerId`, `landmark`,
`version`, `managerId`, `boardURL`, `password`)
VALUES(`pOldBoardUUID`,
(2starsglobal.sims から rS.id を rS として選択
WHERE rS.name=`pSimName`),
(2starsglobal.avatars から rA.id を rA として選択
WHERE rA.UUID = `pOwnerUUID`),
`pLandmark`、`pVersion`、
(2starsglobal.avatars から rA2.id を rA2 として選択
WHERE rA2.UUID = `pManagerUUID`)、
`pBoardURL`、
`pPassword`)
重複キー更新時 `boardUUID`=`pNewBoardUUID`,
`landmark`=`pLandmark`, `version`=`pVersion`,
`boardURL`=`pBoardURL`;
終わり
";
そしてPHPコード
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';
}
}