2014-01-06 30 views
2

我已經下表和最後插入值id店同桌另一特定列

Table Name = users 
column = user_id, name, email, password, status, identity 

我使用插入數據下面的查詢表users

$name    = mysql_real_escape_string($_POST['name']); 
$email   = mysql_real_escape_string($_POST['name']); 
$password  = mysql_real_escape_string($_POST['txtPassword']); 
$password  = md5($password); //===Encrypt Password 

if(isset($_POST['btnRegister'])) //===When I will Set the Button to 1 or Press Button to register 

{ 
$query = "insert into users(name,email,pasword,status,identity)values('$name','$email','$password','1','0')"; 

$res = mysql_query($query); 
header('location:success_register.php');//Redirect To Success Page 
} 

什麼,我問列是的,我想最後一個ID存儲identity柱也

例如:如果最後user_id= 10identity還將= 10。我的意思是讓那麼最後的ID編號存儲identity

結果會是這個樣子

user_id  name  email   password status identity 
5   aa   [email protected]  ****  1   5 
6   bbb   [email protected]  ****  1   6 

怎麼辦呢,?

+0

PHP具有訪問此信息的功能。 – Strawberry

+1

停止使用'mysql_ *'並切換到'PDO',您不會遇到這些問題。 – Peon

+0

您可以使用'AFTER INSERT'觸發器,它用'new.user_id'填充'identity'。 – Barmar

回答

1

MYSQL,你有另一種可能找到它,當你覺得last_insert_id()不工作。您可能需要SELECT特權INFORMATION_SCHEMA及其表格。

如果您擁有該權限,請嘗試以下查詢。

$query = "insert into users(name, email, pasword, status, identity)" 
     . " values('$name', '$email', '$password', '1'," 
     . " (SELECT AUTO_INCREMENT FROM INFORMATION_SCHEMA.TABLES" 
     . " WHERE TABLE_NAME='users' and TABLE_SCHEMA=DATABASE())" 
     . ")"; 

而且,最後,建議停止使用廢棄的API。

1

您正在尋找:

mysql_insert_id()

mysqli_insert_id(mysqli $link)//for mysqli 
PDO::lastInsertId()//for PDO 

另一種方法: 如果你的id列是自動增量,而不是隨機的,那麼你可以選擇最大號(每次僅在插入查詢後)從用戶表中插入並插入到所需的任何列中。

$id=mysql_result(mysql_query(select max(user_id) 
from users),0); 

不使用mysql_因爲它們depracated *

+0

,連接參數必須被傳遞... ** mysqli_insert_id($ link)** – user1844933

+0

@ user1844933耶正確,那就是爲什麼我給OP的鏈接來看看。 –

-1

我認爲你需要插入後插入表中的行數: 它可能對你有用

$query = "insert into users(name,email,pasword,status,identity)values('$name','$email','$password','1','0',(select COUNT(*)+1 FROM users))"; 
+1

如果有過刪除操作,行數與自動增量ID不同。 – Barmar

+0

因此,您可以用 替換選擇查詢SELECT AUTO_INCREMENT FROM information_schema.tables WHERE TABLE_NAME ='users' – SSRaavi

+0

如果另一個客戶端已同時插入另一行,該怎麼辦?爲什麼你要儘量避免使用'mysql_insert_id()'或'SELECT LAST_INSERT_ID()'? – Barmar

1

保存最後一個插入標識,例如:

$id = mysql_insert_id(); 

,並用它在下一插入

0

這裏是你在找什麼。 Select max(user_id)+1並將其存儲在一個變量中。 現在您需要在user_id和標識參數中傳遞此變量。

注意,即使user_id是自動遞增,這將讓你與指定USER_ID插入新行

+0

如果另一個客戶端在該客戶端之後插入了一行,這將是錯誤的。 – Barmar

+0

然後,唯一的方法是在表中插入行後觸發更新查詢。爲什麼你要這樣做@mans? – nextgtech

0

我想你也可以把它像這樣

$lastID = MySQLI_insert_id($DBcon); //where Dbcon is your connection to your database 

然後

$query = "insert into users(name,email,pasword,status,identity)values('$name','$email','$password','1','$lastID')"; 

$res = mysql_query($query);