2015-06-09 85 views
1

將新行插入我的外部數據庫之後,我想要接收與新行一起創建的新(自動遞增的)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

mysqli_query是程序性的風格。也許oop風格($ mysqli)不喜歡它? – Goikiu

+0

什麼是$ GLOBALS中的連接,以及創建和猜測數據庫連接類的實例。看起來很奇怪。 –

回答

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

你能在面向對象的風格like

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

嘗試,你會得到最後insert Id

$mysqli->insert_id; 
1

有兩種方法來實現它:

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

或Paulpro回答:

$last_id = $mysqli->insert_id; 
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_idinsert_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"]);