PHP 无法获取最后插入记录的 ID

标签 php mysql

我试图获取插入到我的 phpMyAdmin 表中的最后一条记录的 ID,但到目前为止我只得到 0。

我几乎尝试了所有方法(例如这个答案的解决方案:a link 或本页推荐的解决方案:a link)但我无法让它工作。

我的表有一个列 id,它是主键并被标记为 AUTO_INCREMENT。

我使用函数query 连接到数据库,然后执行查询:

function query($sql) {
    $conn = mysqli_connect ( DB_HOST, DB_USER, DB_PASSWORD, DB_NAME );
    // Check connection
    if (mysqli_connect_errno ()) {
        echo 'connection failed: ' . mysqli_connect_error ();
    }
    // Check if the server is alive
    if (mysqli_ping ( $conn )) {
        // echo 'Connection is ok';
    } else {
        echo 'Error: ' . mysqli_error ( $dbc );
    }

    $sql = mysqli_query ( $conn, $sql );
    $last_id = mysqli_insert_id( $conn );
    $num_rows = mysqli_num_rows ( $sql );
    $result = mysqli_fetch_assoc ( $sql );

    return array (
            "num_rows" => $num_rows,
            "result" => $result,
            "sql" => $sql,
            "last_id" => $last_id
    );
    mysqli_close($conn);
}

然后我从调用第一个函数的地方得到另一个函数来执行查询:

function reg_shp_add($address_type, $company_name, $country, $state, $city, $zip, $street_name, $street_number, $tel){
    if($address_type=="residential"){
        $my_address_type = "r";
    }else{
        $my_address_type = "c";
    }
        $this->query ( "INSERT INTO `Addresses` (`company_name`, `street_address`, `address_two`, `zip_code`, `city_name`, `state_id`, `country_id`, `phone_number`, `res_comm_add`, `date_entered`) VALUES ('$company_name', '$street_name', '$street_number', '$zip', '$city', '$state', '$country', '$tel', '$my_address_type', CURRENT_TIMESTAMP)" );
        $address_id = $sql ['user_id'];
        $customer_id = $_COOKIE['userId'];
        $this->query ( "INSERT INTO `Cust_address_type` (`cust_id`, ` mail_address_id`, `address_type`) VALUES ('$customer_id', '$address_id', 'Shipping')" );
        return 'Address was saved.';

}

我首先尝试从我的 reg_shp_add 函数中检索最后一个 ID,但我想它必须从第一个函数中完成。

有人能帮帮我吗?

最佳答案

我测试了您的代码,函数 mysqli_insert_id 与我一起正常工作 ( ["last_id"]=> int(8) )。但是问题出在你的第二个函数中,关于数据检索;

$this->query ( "INSERT INTO `Addresses` (`company_name`, `street_address`, `address_two`, `zip_code`, `city_name`, `state_id`, `country_id`, `phone_number`, `res_comm_add`, `date_entered`) VALUES ('$company_name', '$street_name', '$street_number', '$zip', '$city', '$state', '$country', '$tel', '$my_address_type', CURRENT_TIMESTAMP)" );
$address_id = $sql ['user_id'];

这里的 $sql 变量是未定义的,你没有将返回值存储到 $sql 中,就像那样:

$sql = $this->query ( "INSERT INTO `Addresses` (`company_name`, `street_address`, `address_two`, `zip_code`, `city_name`, `state_id`, `country_id`, `phone_number`, `res_comm_add`, `date_entered`) VALUES ('$company_name', '$street_name', '$street_number', '$zip', '$city', '$state', '$country', '$tel', '$my_address_type', CURRENT_TIMESTAMP)" );
$address_id = $sql ['user_id'];

关于PHP 无法获取最后插入记录的 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31711620/

相关文章:

php - PHP到C++,CPP转换

javascript - 使用 POST 和 GET 时 WooCommerce Rest API 错误

mysql - 每天的记录数,包括0个值

mysql - 在 MySQL 中,如何编写查询以从另一个表中的位置选择数据范围?

php - MySQLi/PHP - 从一个数据库中提取数据。插入到另一个数据库

php - 什么是 "real"MVC 模式?

php - 在类中重用方法

php - WordPress MySQL 查询不工作

java - 在 JEE 中 24 小时后从 MySQL 中删除一行?

mysql - 我正在尝试为数据库编写 DDL 脚本。我正在尝试将字段 area_number 和 seat_number 与表票链接起来