即使有插入,MySQL insert_id 也返回 null

问题描述

我有以下 PHP 代码。我希望返回插入的最后一个 ID:

$sql = $this->dbLink->prepare("
            INSERT INTO VesselTransits (CreatedByUserID,TerminalID,VesselArrivalDate,VesselNameID)
            VALUES (?,?,?)
    ");
//i=integer,s=string
$sql->bind_param('iisi',$userID,$terminalID,$arrivalDate,$vesselNameID);
$userID          = $this->invoiceData['userID'];
$terminalID      = $this->invoiceData['terminalID'];
$arrivalDate     = date('Y-m-d',strtotime($this->invoiceData['berthDate']));
$vesselNameID    = $this->invoiceData['vesselNameID'];
$sql->execute();
$vesselTransitID = $sql->insert_id;
//echo('RecordInvoice line '.__LINE__.'<pre>');print_r($vesselTransitID);echo('</pre>');exit();

return($vesselTransitID);

我的数据库架构如下:

CreatedByUserID   int
CreationDate      datetime
ModifiedByUser    int
ModifyDate        datetime
TerminalID        int
VesselArrivalDate datetime
VesselNameID      int
VesselTransitID   int [auto_increment]

我把厨房的水槽扔了过去,但没有掷骰子。无论我做什么,$vesselTransitID 始终是未定义的。我已经验证实际上有一个插入。我只剩下运行另一个选择并返回 MAX VesselTransitID 的唯一(可怕)选项,这并不能保证正确的结果。

解决方法

虽然语句对象具有 insert_id 属性,但它似乎不时引起问题,如下所示。

由于语句对象 insert_id 属性在这么多年之后仍然没有完全记录下来,为了简单和安全,我建议使用 insert_id 的连接对象版本

也是这样

$vesselTransitID = $this->dbLink->insert_id;