gpt4 book ai didi

php - 在 PHP 中返回最后一个 MySQL 插入的 id

转载 作者:行者123 更新时间:2023-11-29 00:14:34 25 4
gpt4 key购买 nike

我正在尝试抓取最后插入的自增行的id,但无法成功抓取。

error_reporting(E_ALL);
ini_set('display_errors', 1);
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

$title = mysqli_real_escape_string($conxn,$_POST['blog_title']);
$entry = mysqli_real_escape_string($conxn,$_POST['blog_entry']);
$sourceName = mysqli_real_escape_string($conxn,$_POST['blog_source_name']);
$sourceLink = mysqli_real_escape_string($conxn,$_POST['blog_source_link']);

if (mysqli_connect_errno()) {
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

$sql="INSERT INTO blog (blog_title, blog_entry, blog_source, blog_link)
VALUES ('$title','$entry','$sourceName','$sourceLink')";

$lastID = $mysqli->insert_id;

if (!mysqli_query($conxn,$sql)) {
die('Error: ' . mysqli_error($conxn));
}

当我回显 $lastID 时,每次提交后都会返回一个“0”。

最佳答案

您需要将 $mysqli->insert_id() 放在实际的 mysqli_query() 之后。见下文。

if (!mysqli_query($conxn,$sql)) {
die('Error: ' . mysqli_error($conxn));
}

$lastID = $mysqli->insert_id;

也就是说,您的代码还有其他问题。首先也是最重要的是,您将调用 mysqli_* 的面向对象风格与过程风格混合在一起。例如,$mysqli->real_escape_string 的 OOP 方法等同于 mysqli_real_escape_string 的过程方法。

所以这样:

$lastID = $mysqli->insert_id;

应该是这样的:

$lastID = mysqli_insert_id($conxn);

所以没有看到你的其余代码,不清楚如何处理。了解差异并进行实验。但是,根据您提供的代码,这是我真诚的建议。

例如,您对 $_POST 值的引用没有单引号,所以我添加了它。此外,由于您使用的是双引号(处理字符串替换),您可以通过去掉 . 连接来压缩 INSERT 变量设置。

$title = mysqli_real_escape_string($conxn, $_POST['blog_title']);
$entry = mysqli_real_escape_string($conxn, $_POST['blog_entry']);
$sourceName = mysqli_real_escape_string($conxn, $_POST['blog_source_name']);
$sourceLink = mysqli_real_escape_string($conxn, $_POST['blog_source_link']);

if (mysqli_connect_errno()) {
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

$sql="INSERT INTO blog (blog_title, blog_entry, blog_source, blog_link)
VALUES ('$title','$entry','$sourceName','$sourceLink')";

if (!mysqli_query($conxn,$sql)) {
die('Error: ' . mysqli_error($conxn));
}

$lastID = mysqli_insert_id($conxn);

完成后,可以进一步清理此代码块,这就是我的处理方式。我已经制作了一个您要获取的 $_POST 值的数组,因此您不必重复代码。还添加了评论以使发生的事情更清楚。我在这里对所有命令都使用了过程格式。如果 OOP 是您想要的,那么您需要更改所有命令以匹配 OOP 格式。

// Set all of the `$_POST` values into an array.
$post_items = array('blog_title','blog_entry','blog_source_name', 'blog_source_link');

// Roll through those values with a `foreach` loop.
foreach ($post_items as $post_item) {
$$post_item = mysqli_real_escape_string($conxn, $_POST[$post_item]);
}

// MySQL connection error check.
if (mysqli_connect_errno()) {
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

// Set the SQL values.
$sql = "INSERT INTO blog (blog_title, blog_entry, blog_source, blog_link)
VALUES ('$blog_title','$blog_entry','$blog_source_name','$blog_source_link')";

// Run the query.
if (!$mysqli_query($conxn, $sql)) {
die('Error: ' . mysqli_error($conxn));
}

// Get the last insert ID via object oriented method.
// $lastID = $mysqli->insert_id;

// Get the last insert ID via procedural method.
$lastID = mysqli_insert_id($conxn);

关于php - 在 PHP 中返回最后一个 MySQL 插入的 id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23439409/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com