2014-03-04 185 views
0

在MySQL中存在多個行,我目前正忙於在基於文本的RPG遊戲,但我的一個部分堅持現在。檢查是否使用PHP

爲了啓動一個任務,玩家確實需要一些物品,這些被存儲在一個字符串:item:1x3-item:5x1 - (basicly項目:IDxamount)。我已經作出爆炸串入變量的函數,但現在腳本需要檢查玩家是否確實列出了所有物品。

我試圖用一個foreach來解決這個問題,但是,對於每一個項目返回正面或負面的,而我只需要知道,如果玩家擁有的所有項目一次。

(不介意不安全的查詢) $parseAmount是一個包含所有項目ID的數組。 $uid是一個包含可變的用戶ID

// check if player has all items 
    foreach($parseAmount as $itemID) 
    { 
    $check_query = mysql_query("SELECT * FROM `player_items` WHERE `player`='$uid' AND `item`=='$itemID' AND `value`>='$parseAmount[1]'"); 
    if(mysql_num_rows($check_query)>=1) 
    {return true;} 
    else 
    {return false;} 
    } 

如果你要我給您寄整體功能,請讓我知道。

+1

[MySQL擴展已被棄用(http://www.php.net/manual/en/function.mysql-query.php)。您應該切換到[MySQLi](http://www.php.net/manual/en/book.mysqli.php)或[PDO](http://www.php.net/manual/en/ref.pdo -mysql.php)並使用預準備語句。 – TimWolla

+0

爲什麼'SELECT *'如果你只是計數行,只是'選擇1' –

+4

@ Akshay2598更妙的是'SELECT COUNT(*)' – TimWolla

回答

1

如果我明白你的問題正確,你需要這樣的東西:

foreach($parseAmount as $itemID) { 
    $sql = "SELECT COUNT(*) AS count 
      FROM player_items 
      WHERE  player = '".mysql_real_escape_string($uid)."' 
        AND item = '".mysql_real_escape_string($itemID)."' 
        AND value >= ".intval($parseAmount[1]); 
    $row = mysql_fetch_array(mysql_query($sql)); 

    if ($row['count'] == 0) { 
     return false; 
    } 
} 
return true; 

不得return true早。你知道結果是true只有在檢查全部的項目。我的代碼可以通過一次選擇所有的項目來改進,但這取決於你自己。

請記住我的評論對MySQL擴展的折舊,採用的MySQLi和預處理語句就會是這個樣子(請注意,我從來沒有與庫MySQLi工作過,並與人工的幫助下建立了它):

foreach($parseAmount as $itemID) { 
    $sql = "SELECT COUNT(*) AS count 
      FROM player_items 
      WHERE  player = ? 
        AND item = ? 
        AND value >= ?" 
    $stmt = $mysqli->prepare($sql); 
    $stmt->bind_param("ssi", $uid, $itemID, $parseAmount[1]); 
    $stmt->execute(); 
    $row = $stmt->get_result()->fetch_array(); 

    if ($row['count'] == 0) { 
     return false; 
    } 
} 
return true; 
+0

是的,你的確理解正確,但主要問題是我不知道如何選擇,也沒有循環選擇所有的項目。我將看看MySQLi和PDO。仍在尋找答案。 –

+0

@JordiPrevost我懷疑查詢最多隻返回一行。無論如何:要循環遍歷結果集,可以使用如下形式:while(!$ row = mysql_fetch_array($ result))'/'while(!$ row = $ result-> fetch_array())''。如果這沒有回答:請擴展您的問題。 – TimWolla