2013-04-15 20 views
0

我遇到了一些腳本問題,我基本上是將數據輸入到MySQL表中。該數據將作爲1行插入到表中。試圖只更新特定行的列值?

當一行數據被輸入到我想目前正在進入有列「ACCOUNT_TYPE」電流/特定行從它的默認值「成員」到「客戶」被更新的表。

這是一個很長的故事,爲什麼我需要做的是這樣,但我不想只是簡單地輸入數值「客戶」必須從「成員」到客戶端進行更新。

我有腳本(這是位於底部的位置)目前正在執行此操作,但它影響表中的所有行,是否有方法可以將更新的where子句添加到只會影響當前行被輸入並且不更新表中的所有其他行?

<?php ob_start(); 
// CONNECT TO THE DATABASE 
    require('../../includes/_config/connection.php'); 
// LOAD FUNCTIONS 
    require('../../includes/functions.php'); 
$username = $_POST['username']; 
$password = $_POST['password']; 
$firstname = $_POST['firstname']; 
$lastname = $_POST['lastname']; 
$email = $_POST['email']; 
$number = $_POST['number']; 
$dob = $_POST['dob']; 
$accounttype = $_POST['accounttype']; 


$query="INSERT INTO ptb_registrations (
username, 
password, 
firstname, 
lastname, 
email, 
number, 
dob, 
accounttype, 
date_created) 
VALUES(
'".$username."', 
'".$password."', 
'".$firstname."', 
'".$lastname."', 
'".$email."', 
'".$number."', 
'".$dob."', 
'".$accounttype."', 
now() 
)"; 
mysql_query($query) or die(); 


$query="INSERT INTO ptb_users (
first_name, 
last_name, 
email, 
password) 
VALUES(
'".$firstname."', 
'".$lastname."', 
'".$email."', 
MD5('".$password."') 
)"; 
mysql_query($query) or dieerr(); 
$result = mysql_query("UPDATE ptb_users SET ptb_users.user_id = ptb_users.id, 
     ptb_users.account_type = 'Client'"); 
+0

有很多的代碼-would是突出重要的一維是有用的。無論如何,如果你只是想更新一個記錄,那麼'UPDATE ... WHERE ...'呢? – fedorqui

+1

使用UPDATE ... WHERE –

回答

1

在第一次查詢後獲取插入的ID,然後在更新中使用它(假設您的主鍵具有自動增量功能)。

+0

我該怎麼做?我只是在剛開始使用MySQL和不會知道從哪裏開始的這一點,但我是自動icncrement id爲主要 –

+0

閱讀本手冊http://www.php.net/manual/en/function.mysql-insert-id.php – slash197

3

Please, don't use mysql_* functions in new code。他們不再維護and are officially deprecated。請參閱red box?請改爲了解prepared statements,並使用PDOMySQLi - this article將幫助您決定哪個。如果您選擇PDO,here is a good tutorial


您可以使用MySQL函數LAST_INSERT_ID()來執行此操作。

舊的ext/mysql擴展通過mysql_insert_id()公開此功能,但您也可以在查詢中直接訪問它,並且更乾淨,更安全。

所以,你可以做這樣的事情:

$result = mysql_query(" 
    UPDATE ptb_users 
    SET ptb_users.user_id = ptb_users.id, 
     ptb_users.account_type = 'Client' 
    WHERE id = LAST_INSERT_ID() 
"); 

我知道你說的「這是一個很長的故事......」但你在做什麼使得小到沒有任何意義。我只能想象你是因爲觸發的這樣做 - 這表明相當不錯,爲什麼觸發器一般都是餿主意;-)

請嘗試重新思考你的設計,如果在所有可能的。

0

嘗試用WHERE條件得天獨厚coloumn

 mysql_query("UPDATE ptb_users SET ptb_users.user_id = ptb_users.id, 
    ptb_users.account_type = 'Client'" WHERE ptb_user.email='$email');