$ mysqli-> insert_id不会工作

时间:2015-06-09 11:47:42

标签: php mysqli

在我的外部数据库中插入新行后,我想收回与新行一起创建的新(自动递增)ID。

<?php

$response = array();

// check for required fields
if (isset($_POST['thread']) && isset($_POST['event_name']) && isset($_POST['fb_id']) && isset($_POST['status'])) {

$event_name = $_POST['event_name'];
$thread = $_POST['thread'];
$fb_id = $_POST['fb_id'];
$status = $_POST['status'];

 // include db connect class
require_once __DIR__ . '/db_fb_connect.php';
// connecting to db
$db = new DB_CONNECT();
// mysql inserting a new row
$result = mysqli_query($GLOBALS["___mysqli_ston"], "INSERT INTO events(event_name, thread) VALUES ('$event_name', '$thread')");

直到这里,事情才完美无缺。该行在事件表中创建,没有其他问题。现在我想获得创建的ID:

$last_id = $mysqli->insert_id();  

这是代码停止工作的地方。我尝试了insert_id语句的一些变体,但似乎都没有。这里的正确方法是什么? 在使用最新ID分配$ last_id之后,我想要第二个查询:

mysqli_query($GLOBALS["___mysqli_ston"], "INSERT INTO UserEvents(fb_id, event_id, status) VALUES('$fb_id', '$last_id', '$status')");

我很感激任何帮助!

4 个答案:

答案 0 :(得分:3)

OOP样式insert_idproperty,而不是函数:

$last_id = $mysqli->insert_id;  
// or, since your mysqli object seems to be in $GLOBALS["___mysqli_ston"]
$last_id = $GLOBALS["___mysqli_ston"]->insert_id;

看起来你并没有真正使用面向对象的mysqli样式。如果你想在任何地方保持一致并使用程序风格,你应该使用:

$last_id = mysqli_insert_id( $GLOBALS["___mysqli_ston"] );

答案 1 :(得分:1)

您可以尝试使用面向对象的样式like

$result = mysqli_query("INSERT INTO events(event_name, thread) VALUES ('".$event_name."', '".$thread."')");

您将获得最后一次insert Id

$mysqli->insert_id;

答案 2 :(得分:1)

有两种方法可以实现它:

$last_id = mysqli_insert_id($GLOBALS["___mysqli_ston"]); 

或Paulpro回答:

$last_id = $mysqli->insert_id;

答案 3 :(得分:1)

这是创建表并显示记录ID的示例。当你不知道错误是什么时,练习总是很好

<?php

$mysqli = new mysqli("localhost", "user", "pass", "db");

/* check connection */
if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}

$mysqli->query("CREATE TABLE myTable LIKE tableExample");

$query = "INSERT INTO myTable VALUES (NULL, 'Test1', 'Test2', 'Test3', 'Test4')";
$mysqli->query($query);

/* show table id */
printf ("New Record has id %d.\n", $mysqli->insert_id);

/* drop table */
$mysqli->query("DROP TABLE myTable");

/* close connection */
$mysqli->close();
?>

insert_id()无效的原因是insert_id不是函数,而是属性。因此,您希望使用insert_id而不是insert_id()

正如Paulpro指出的那样,有两种方法:Paulpro answer

  

OOP样式insert_id是属性,而不是函数:

     

$last_id = $mysqli->insert_id; //或者,因为你的mysqli对象似乎在$GLOBALS["___mysqli_ston"]

     

$last_id = $GLOBALS["___mysqli_ston"]->insert_id;

     

看起来你实际上并没有使用面向对象的mysqli样式。如果你想在任何地方保持一致并使用程序风格,你应该使用:

     

$last_id = mysqli_insert_id( $GLOBALS["___mysqli_ston"] );