返回PHP中最后一个MySQL插入的id
我正在尝试获取上次插入的自动增量行的id,但无法成功获取它返回PHP中最后一个MySQL插入的id,php,mysql,insert-id,Php,Mysql,Insert Id,我正在尝试获取上次插入的自动增量行的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
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\u escape\u string
的OOP方法等同于mysqli\u real\u escape\u string
的过程方法
因此:
$lastID = $mysqli->insert_id;
应该是这样的:
$lastID = mysqli_insert_id($conxn);
因此,在看不到其余代码的情况下,不清楚如何处理。了解差异并进行实验。但是,以下是我基于您提交的代码真诚地提出的建议
例如,您对$\u POST
值的引用没有单引号,因此我添加了单引号。此外,由于使用双引号处理字符串替换,因此可以通过取消
串联来压缩插入
变量设置
$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);
完成后,这个代码chunklet可以被进一步清理,这就是我将如何处理它。我已经为您获取的$\u 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);
您实际上没有运行查询…1)显示设置$mysqli
的代码和执行$sql
的代码。2) 确保处理错误。3) 停止连接值;改为使用。首先在[blog\u title]
中加上一些引号,就像在['blog\u title']
中一样,然后对其他引号做同样的操作。另外,将错误报告添加到文件顶部error\u reporting(E\u ALL);ini设置(“显示错误”,1);mysqli_报告(mysqli_报告错误| mysqli_报告严格)代码>谢谢-错误处理和单引号添加到上述代码中。mysqli没有在我的连接脚本中定义,但现在是。我现在在echo上得到了一个返回值,但它是一个常量“0”,这是因为您的代码是一堆相互竞争的方法。检查我对我的答案的最新编辑,但是你现在需要确保你对MySQLi命令的所有调用都是OOP。谢谢你-我已经清理了插入以添加直接变量。太棒了,谢谢你的数组-我有一个注释要回顾,并尝试清理我页面中的重复。这太完美了,帮了我大忙。再次感谢你!我现在在$lastID上返回“0”,所以我认为它的方向是正确的。@user3053484检查我的最新编辑。您的关键问题似乎是将OPP格式与程序混为一谈。因此,使用mysqli\u insert\u id
而不是$mysqli->insert\u id
。这太棒了!现在效果很好。再次感谢所有的帮助和为新手节省的时间。关闭以了解如何开始将$lastID写入查找表。:)