1

我的问题是:我创建了一个从 php 到 mysql 的存储过程。现在,在有人谈论这种做法之前,该程序运行良好。问题是这样的,当我从 php 调用该过程并且我知道已输入一条记录时,mysql_insert_id() 返回 0...任何想法为什么?

哦,是的,我的 id 字段是 AUTO_INCREMENT 和 PRIMARY KEY

ps 如果有一种简单的方法可以在这里格式化我的代码,请告诉我。我把pre放在html中,但似乎效果不太好。

提前泰。

$PROCEDURE_INSERT_UPDATE_BOARD =
"
创建过程 InsertUpdateBoard(IN `pNewBoardUUID` CHAR(36),
                                   在 `pOldBoardUUID` CHAR(36) 中,
                                   在 `pSimName` VARCHAR(40) 中,
                                   在 `pOwnerName` VARCHAR(64) 中,
                                   在 `pOwnerUUID` CHAR(36) 中,
                                   在 `pLandmark` VARCHAR(80) 中,
                                   在 `pVersion` VARCHAR(10) 中,
                                   在`pManagerUUID` CHAR(36) 中,
                                   在 `pBoardURL` CHAR(80) 中,
                                   IN `pPassword` CHAR(8))
    开始   
        调用 InsertUpdateSims(`pSimName`);
        调用 InsertUpdateAvatars(`pOwnerName`, `pOwnerUUID`);

        插入板(`boardUUID`,`simId`,`ownerId`,`landmark`,
                                   `version`, `managerId`, `boardURL`, `password`)
                            值(`pOldBoardUUID`,                                      
                            (从 2starsglobal.sims 中选择 rS.id 作为 rS
                                    其中 rS.name=`pSimName`),
                            (从 2starsglobal.avatars 中选择 rA.id 作为 rA
                                    其中 rA.UUID = `pOwnerUUID`),
                            `pLandmark`,`pVersion`,
                            (从 2starsglobal.avatars 中选择 rA2.id 作为 rA2
                                    其中 rA2.UUID = `pManagerUUID`),
                            `pBoardURL`,
                            `pPassword`)
        在重复键更新`boardUUID`=`pNewBoardUUID`,
                    `地标`=`pLandmark`,`版本`=`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 十秒钟找到这个页面

注意,如果你调用一个 MySQL 存储过程插入一条新记录,然后引用 $db->insert_id; 你会得到 0 回来,而不是最后插入的 ID。

因此,有必要在 MySQL 存储过程中添加一行,例如

选择 last_insert_id() 作为 intRecordKey;

在插入之后,以便查询将返回新的键值。

于 2012-10-06T15:40:22.550 回答