Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/243.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
返回PHP中最后一个MySQL插入的id_Php_Mysql_Insert Id - Fatal编程技术网

返回PHP中最后一个MySQL插入的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

我正在尝试获取上次插入的自动增量行的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\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写入查找表。:)