【问题标题】:mysqli_insert_id is not working on php OOP methodmysqli_insert_id 不适用于 php OOP 方法
【发布时间】:2017-01-04 23:46:51
【问题描述】:

我正在测试使用 mysqli_insert_id 获取最后一个 auto_increment_ID 的功能。当我发现如果我使用两种不同的方法时,我感到很困惑,结果是不同的。

方法一

<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";

// Create connection
$conn = mysqli_connect($servername, $username, $password, $dbname);
// Check connection
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}

$sql = "INSERT into item(uid,item_id,item_name,item_price,item_quantity) 
                    VALUES('1','0','hhh','23','23');";

if (mysqli_query($conn, $sql)) {
$last_id = mysqli_insert_id($conn);
echo "New record created successfully. Last inserted ID is: " . $last_id;
} else {
echo "Error: " . $sql . "<br>" . mysqli_error($conn);
}

mysqli_close($conn);
?>

这种程序方式有效,因为我可以获得最后一个 ID。

方法二

db.php

class db{

protected $db_host;
protected $db_name;
protected $db_user_name;
protected $db_pass;

public function __construct($host,$db_n,$user_n,$pass) {
    $this->db_host=$host;
    $this->db_name=$db_n;
    $this->db_user_name=$user_n;
    $this->db_pass=$pass;
}

public function conn(){
    return mysqli_connect($this->db_host, $this->db_user_name, $this->db_pass, $this->db_name);
}
}

test.php

require "db.php";

$db=new db('localhost','bs','root','');

$sql = "INSERT into item(uid,item_id,item_name,item_price,item_quantity) 
                    VALUES('1','0','hhh','23','23');";

if (mysqli_query($db->conn(), $sql)) {
$last_id = mysqli_insert_id($db->conn());
echo "New record created successfully. Last inserted ID is: " . $last_id;
} else {
echo "Error: " . $sql . "<br>" . mysqli_error($db->conn());
}

mysqli_close($db->conn());

这个方法根本行不通...它会得到结果 0 。有谁知道我哪里出错了?

【问题讨论】:

    标签: php mysql


    【解决方案1】:

    只初始化一次-&gt;conn() 方法,然后重用它。每次调用都会创建一个新的:

    $db = new db('localhost','bs','root','');
    $connection = $db->conn(); // initialize once
    $sql = "INSERT into item(uid,item_id,item_name,item_price,item_quantity) 
                        VALUES('1','0','hhh','23','23');";
    
    if (mysqli_query($connection, $sql)) {
        $last_id = mysqli_insert_id($connection);
        echo "New record created successfully. Last inserted ID is: " . $last_id;
    } else {
        echo "Error: " . $sql . "<br>" . $connection->error;
    }
    
    $connection->close();
    

    或者使用面向对象的接口(@98​​7654323@属性):

    $db = new db('localhost','bs','root','');
    $connection = $db->conn(); // initialize once
    $sql = "INSERT into item(uid,item_id,item_name,item_price,item_quantity) 
                        VALUES('1','0','hhh','23','23');";
    
    if($connection->query($sql)) {
        $last_id = $connection->insert_id;
        echo "New record created successfully. Last inserted ID is: " . $last_id;
    } else {    
        echo "Error: " . $sql . "<br>" . $connection->error;
    }
    
    $connection->close();
    

    【讨论】:

    • hey thx ghost,只是一个小问题,我只想知道哪行编码显示我初始化了两次?我是 php 新手,这就是为什么想知道哪一部分出了问题。
    • @gosulove $db-&gt;conn()你已经用过很多次了,上面的代码看了3次,你应该在初始化db类后分配一次$db-&gt;conn(),然后重复使用它
    【解决方案2】:

    只是因为你调用了$db->conn()两次,你需要将$db->conn()赋值给一个变量。如下:

    require "db.php";
    
    $db=new db('localhost','bs','root','');
    
    $sql = "INSERT into item(uid,item_id,item_name,item_price,item_quantity) 
                    VALUES('1','0','hhh','23','23');";
    
    $conn = $db->conn();
    if (mysqli_query($conn, $sql)) {
        $last_id = mysqli_insert_id($conn);
        echo "New record created successfully. Last inserted ID is: " . $last_id;
    } else {
       echo "Error: " . $sql . "<br>" . mysqli_error($conn);
    }
    
    mysqli_close($conn);
    

    【讨论】:

      猜你喜欢
      • 2012-02-24
      • 2011-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多