返回 mysql 最后插入 id 作为链接变量

Posted

技术标签:

【中文标题】返回 mysql 最后插入 id 作为链接变量【英文标题】:return mysql last insert id as a link variable 【发布时间】:2016-09-18 16:44:33 【问题描述】:

我有以下 php 页面。我需要将 INSERT 语句的最后插入 id 作为链接变量返回到我的 php 页面。我的代码如下:

room_reservation.php

<?php
    if(isset($_REQUEST["id"]))
        echo $_REQUEST["id"];
    
?>
<html>
<body>
    <form method="post" action="reception-c.php">
        <input type="text" name="trans_id"/>
        <input type="text" name="start_date"/>
        <input type="text" name="cust_id"/>
        <input type="submit" name="submit" value="submit"/>
    </form>
</body>
</html>

reception-c.php

<?php
    require_once '../model/reception-m.php';

    $trans_id=$_POST["trans_id"];
    $start_date=$_POST["apply_date"];
    $cust_id=$_POST["customerid"];
    $obj=new Reception();
    if($trans_id==="")
        $result=$obj->generateNewTransaction($start_date,$cust_id);
        $trans_id=$result;
    
    header("Location: ../view/room_reservation.php?id=$trans_id");

?>

reception-m.php

require_once '../../common/model/dbconnection-m.php';

<?php
class Reception
public function generateNewTransaction($start_date,$cust_id)
    global $db;
    $query="INSERT INTO transaction_log VALUES ('','$start_date',NULL,'pending','$cust_id')";
    $result=$db->add_query($query);
    return $db->insert_id; //Not Working


?>

dbconnection-m.php

<?php

class Database
private $connection;

function __construct() 
    $this->open_connection();


public function open_connection()
    $this->connection=  mysqli_connect('localhost', 'root', '', 'mis');
        if(!$this->connection)
            die("Error, failed to connect to database ".  mysqli_error($this->connection));
                 


public function add_query($query)
    $result=  mysqli_query($this->connection, $query);
    if(!$result)
        die("Error while adding query ".  mysqli_error($this->connection));
    
    else
        return $result;
    


public function fetch_array($value)
    return $value->fetch_assoc();



$db=new Database(); 

我的代码一直有效,直到在reception-m.php 中提交查询为止。通过phpmyadmin浏览表确认。但是返回 $db->insert_id;在接收-m .php 中不起作用,我返回一个空值(不是零)。

该表的 transaction_id 设置为 AUTO INCREMENT,所以我认为这不是问题所在。我关心我的 dbconnection-m.php,因为这不是用于解释 php 文档的那个。

请帮我解决这个问题...

编辑

1   transaction_id Primary  int(11) AUTO_INCREMENT  
2   start_date  date
3   end_date    date
4   status  enum('pending', 'completed')    
5   customer_id int(11)

【问题讨论】:

可以为transaction_log添加表结构吗? 您的班级没有insert_id 属性!?!?!??!?! 您应该在 PHP 错误日志中收到错误 PS:为现有的完全可用的类编写类包装器是很危险的,除非您知道自己在做什么。它通常是一个巨大的矫枉过正,完全没有必要 您的错误:return $db-&gt;insert_id; 应该是 return $db-&gt;connection-&gt;insert_id; 但您还需要将其从 private 更改为 protected 你也在课堂上使用global。这也是糟糕的形式,因为这完全破坏了任何封装 【参考方案1】:

在我将指出的文件中更改以下语法,因为可以在连接变量的帮助下并在执行查询后获取最后插入的 id。

reception-m.php

替换:

return $db->insert_id; //Not Working

return $db->$connection->insert_id;

在此文件中,您必须进行以下更改。

dbconnection-m.php

替换:

class Database
private $connection;

class Database
protected $connection;

【讨论】:

仔细看my comment 回答问题...但感谢@RiggsFolly,我有一些严重的问题需要解决 @RiggsFolly。我已按照您给兄弟的建议进行了更改:) 进行这两项更改都会给我以下结果:致命错误:无法访问受保护的属性 Database::$connection in C:\xampp\htdocs\HotelManagementSystem\reception\model\reception-m.php 在线58.......第 58 行包含 return $db->connection->insert_id; 将其还原为私有并检查我们是否会尝试破解

以上是关于返回 mysql 最后插入 id 作为链接变量的主要内容,如果未能解决你的问题,请参考以下文章

使用PHP在mysql中插入数据时返回最后一个id

在 PDO(使用 MySQL)中执行 INSERT 后获取最后插入的行?

用于 mysql 的 Subsonic 3.0.0.4 活动记录模板不返回最后插入的 id

在codeigniter中多次进入mysql时获取最后插入的'Id'

我似乎无法从 MySQL 获取最后插入的记录/ID

MySQL:在没有 auto_increment 的情况下获取最后插入的主键