2012-12-19 55 views
1

我一直在嘗試做一個Facebook遊戲幾個星期了,我卡住了..它可能會是一個簡單的問題來回答,但這是我第一次與MySQL合作,我沒有找到一些在互聯網上幫助我。插入一次到MySQL或更新,如果存在 - Facebook的應用程序

我想做的是一個Flash遊戲,人們在確認被授予後上傳他們的個人數據,如電子郵件,姓名,姓氏,並獲得分數,如果現有值較低。

說得對,現在我已經成功地創建此代碼

$dbhost  = 'bla bla'; 
$dbuser  = 'bla bla'; 
$dbpass  = 'bla bla'; 
$data  = 'bla bla'; 



$db = mysql_connect($dbhost, $dbuser, $dbpass); 

if (mysql_errno() > 0) { 
if (mysql_errno() == 1203) { 
    die("DB error"); 
} else { 
    die("DB error"); 
} 
} 

if ($_REQUEST['action'] == "add") { 
mysql_select_db($data, $db); 
$insert = "INSERT INTO FB (UID, first_name, last_name, email, link) 
VALUES (

    '".$_REQUEST['uid']."', 
    '".$_REQUEST['first_name']."', 
    '".$_REQUEST['last_name']."', 
    '".$_REQUEST['email']."', 
    '".$_REQUEST['link']."' 

    )"; 

$res = mysql_query($insert, $db) or die ("Save Error"); 
mysql_close($db); 
echo "Added to DB!"; 
} 

它工作得很好,但它有一個問題..如果我再次提交這個行業的另一個複製列在表中出現相同的信息。

我希望用戶只提交一次..因此擁有唯一的行並只更新他的分數,如果他設法獲得更高的分數。

任何幫助,將不勝感激:)

+5

**你的代碼很容易受到SQL注入攻擊**你真的*應該使用[prepared statements](http://stackoverflow.com/a/60496/623041),你通過它你的變量作爲參數不被SQL評估。如果你不知道我在說什麼,或者如何解決它,請閱讀[Bobby Tables](http://stackoverflow.com/q/332365/623041)的故事。 – eggyal

+0

正如[簡介](http://www.php.net/manual/en/intro.mysql.php)中有關'mysql_ *'函數的PHP手冊章節所述:*此擴展已被棄用,因爲PHP 5.5.0,建議不要編寫新的代碼,因爲它將來會被刪除。相反,無論是[mysqli](http://www.php.net/manual/en/book.mysqli.php)還是[PDO_MySQL](http://www.php.net/manual/en/ref.pdo應該使用-mysql.php)擴展名。另請參閱[MySQL API概述](http://www.php.net/manual/en/mysqlinfo.api.choosing.php)以獲得進一步的幫助,以便選擇MySQL API。* – eggyal

回答

1

創建相應的UNIQUE鍵,然後使用INSERT ... ON DUPLICATE KEY UPDATE

ALTER TABLE FB ADD UNIQUE KEY (UID); 

INSERT INTO FB 
    (UID, first_name, last_name, email, link) 
VALUES 
    (123, 'foo', 'bar', '[email protected]', '') 
ON DUPLICATE KEY UPDATE 
    first_name = VALUES(first_name), 
    last_name = VALUES(last_name), 
    email  = VALUES(email) 
    link  = VALUE(link) 
; 
+0

我試過這種方式:'\t $插入= 「ALTER TABLE FB ADD UNIQUE KEY(UID); \t INSERT INTO FB_ca(UID,名字,姓氏,電子郵件,鏈接) \t VALUES( \t \t \t \t「」。$ _ REQUEST [ 'UID'] 「 ' \t \t'」。$ _ REQUEST [ 'FIRST_NAME'。 「 ' \t \t'」。$ _ REQUEST [ '姓氏']。 「 ' \t \t'」。$ _ REQUEST [ '電子郵件' ]。「」, \t \t'「。$ _ REQUEST ['link']。「」 \t \t \t \t) \t \t ON DUPLICATE KEY UPDATE \t如first_name = VALUES(如first_name) \t姓氏= VALUES(姓氏), \t電子郵件= VALUES(電子郵件) \t鏈路= VALUES(鏈路)\t \t「;'但它返回一個保存錯誤..我做錯了什麼?感謝您的幫助人:) –

+0

由於某種原因這個ALTER TABLE FB添加唯一鍵(UID);返回錯誤 –

+0

@EneaDhiamandi:'ALTER TABLE'命令只需要運行一次,例如在phpMyAdmin中。 – eggyal

0

樓主提到的一些關於得分,但它並不存在於表中的列... 應該檢查新分數是否小於當前分數,如果是,則將新分數分配給更新中的字段,否則使用當前分數。

+0

或只是'分數= GREATEST(得分,VALUES(得分))' – eggyal

+0

哦,整潔。謝謝! – Howitzer

相關問題