在我的外部数据库中插入新行后,我想收回与新行一起创建的新(自动递增)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')");
我很感激任何帮助!
答案 0 :(得分:3)
OOP样式insert_id
是property,而不是函数:
$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"] );