1

我正在尝试获取最后插入的自动增量行的 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”。

4

1 回答 1

1

您需要$mysqli->insert_id()mysqli_query(). 见下文。

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

$lastID = $mysqli->insert_id;

也就是说,您的代码还有其他问题。首先,您将面向对象的调用风格mysqli_*与程序风格混为一谈。例如 的 OOP 方法$mysqli->real_escape_string等同于 的过程方法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);
于 2014-05-03T02:14:22.380 回答