【问题标题】:MySQL insert_id returning null even though there was an insert即使有插入,MySQL insert_id 也会返回 null
【发布时间】:2021-06-24 19:04:14
【问题描述】:

我有以下 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 的唯一(可怕)选项,这不能保证正确的结果。

【问题讨论】:

  • 试试$this-&gt;dbLink-&gt;insert_id;它是mysqli类(连接)的属性而不是语句类
  • 您是在使用 mysqli 还是在使用其他在内部使用 mysqli 的库? insert_id 永远不能为空。

标签: php mysql mysqli auto-increment


【解决方案1】:

虽然语句对象具有insert_id 属性,但它似乎确实会不时引起问题,就像这里一样。

由于声明对象insert_id 属性在这些年来仍未完全记录,因此我建议使用insert_id 的连接对象版本来简单和安全

也是这样

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

【讨论】:

  • @Dharman 严格来说你是对的,但是使用语句对象版本在过去导致了手册中记录的问题,它是 仍然手册中也没有完全记录,因此我总是建议使用连接 mysqli 对象版本。它似乎确实导致此 OP 成为强调潜在问题的问题
猜你喜欢
  • 2015-12-30
  • 2018-02-12
  • 1970-01-01
  • 2020-11-29
  • 1970-01-01
  • 2018-05-13
  • 2017-03-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多