1

私の問題は次のとおりです。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'; 
    }       

}
4

1 に答える 1

2

Googleで10秒でこのページを見つけました

MySQL ストアド プロシージャを呼び出して新しいレコードを挿入し、$db->insert_id; を参照する場合に注意してください。最後に挿入された ID ではなく、0 が返されます。

したがって、次のような行を MySQL ストアド プロシージャに追加する必要があります。

intRecordKey として last_insert_id() を選択します。

挿入後、クエリが新しいキー値を返すようにします。

于 2012-10-06T15:40:22.550 に答える