首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP & mySQL获取最后一个插入ID

问PHP & mySQL获取最后一个插入ID
EN

Stack Overflow用户
提问于 2015-08-12 07:49:30
回答 3查看 164关注 0票数 1

我是php/mysql交易的新手,我很难弄清楚这种情况。

我有两个表,一个是“狗”表,另一个是“日期”表。为了在“狗”表中插入一条记录,我必须首先在“表”日期中插入一个日期,并从该日期获得自动增量id。

问题是我试着读了几篇关于如何从你刚插入一条记录的表中获取最后一个插入id的文章,但我似乎不能让它工作。

代码语言:javascript
复制
$sql1="INSERT INTO FECHAS (fecha) VALUES (NOW())";
mysql_query($sql1);
echo $sql1;

$sql3="SELECT LAST_INSERT_ID()";
mysql_query($sql3);
echo $sql3;



  $sql2="INSERT INTO PERRO (nombre_perro,FECHAS_id_fecha) VALUES ('$nombre_perro_var', '$last_id')";
echo $sql2;
if (!$mysqli->query($sql2)) {
    echo 'Error: ', $mysqli->error;
}
$result2 = mysql_query($sql2); 

请原谅这段代码,我是新手,正在学习。

谢谢!

EN

回答 3

Stack Overflow用户

发布于 2015-08-12 08:15:03

使用mysqli而不是mysql_

与mysqli连接的:

代码语言:javascript
复制
$connection = mysqli_connect($hostname, $username, $password, $database_name);

插入到表中的:

代码语言:javascript
复制
mysqli_query($connection, $sql);

正在检索上次插入的id:

代码语言:javascript
复制
$id = mysqli_insert_id($connection);
票数 1
EN

Stack Overflow用户

发布于 2016-03-30 18:18:22

代码语言:javascript
复制
**Database**

CREATE TABLE MyGuests (
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
firstname VARCHAR(30) NOT NULL,
lastname VARCHAR(30) NOT NULL,
email VARCHAR(50),
reg_date TIMESTAMP
) 



**Example (MySQLi Object-oriented)**
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

$sql = "INSERT INTO MyGuests (firstname, lastname, email)
VALUES ('John', 'Doe', 'john@example.com')";

if ($conn->query($sql) === TRUE) {
    ***$last_id = $conn->insert_id;***
    echo "New record created successfully. Last inserted ID is: " . $last_id;
} else {
    echo "Error: " . $sql . "<br>" . $conn->error;
}

$conn->close();
?>

**Example (MySQLi Procedural)**
<?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 MyGuests (firstname, lastname, email)
VALUES ('John', 'Doe', 'john@example.com')";

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);
?>

**Example (PDO)**
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDBPDO";

try {
    $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
    // set the PDO error mode to exception
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $sql = "INSERT INTO MyGuests (firstname, lastname, email)
    VALUES ('John', 'Doe', 'john@example.com')";
    // use exec() because no results are returned
    $conn->exec($sql);
    ***$last_id = $conn->lastInsertId();***
    echo "New record created successfully. Last inserted ID is: " . $last_id;
    }
catch(PDOException $e)
    {
    echo $sql . "<br>" . $e->getMessage();
    }

$conn = null;
?> 
票数 0
EN

Stack Overflow用户

发布于 2016-03-30 18:48:18

一个过程化的解决方案(尽管它可能有一点错误--我在PHP方面很糟糕)……

代码语言:javascript
复制
<?php
include('path/to/connection/stateme.nts');

$query = "
INSERT INTO fecha (fecha) VALUES (NOW());
 ";

mysqli_query($db,$query);

$query = "
INSERT INTO perro (nombre_perro,id_fecha) VALUES (?,?);
";

$nombre_perro = 'rover';

$id_fecha = mysqli_insert_id($db);

$stmt = mysqli_prepare($db,$query);

mysqli_stmt_bind_param($stmt, 'si', $nombre_perro,$id_fecha);

mysqli_stmt_execute($stmt);

?>

您可以考虑将这两个查询绑定到一个事务中,以便在第二个查询由于某种原因而失败的情况下,第一个查询也会失败。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31953843

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档