使用PHP检查MySQL中是否存在多行

时间:2014-03-04 02:29:39

标签: php mysql foreach items

我目前正在忙于基于文本的RPG游戏,但我现在被困在一个部分。

为了开始任务,玩家确实需要一些项目,这些项目存储在一个字符串中:item:1x3-item:5x1 - (基本项目:IDxamount)。我已经创建了一个将字符串分解为变量的函数,但现在脚本需要检查玩家是否确实列出了所有项目。

我试图用foreach解决问题,但是每个项目都会返回正面或负面,我只需要知道玩家是否同时拥有所有项目。

(不介意不安全的查询) $parseAmount是一个数组,包含所有项ID。 $uid是包含userID

的变量
// 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 个答案:

答案 0 :(得分: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和Prepared Statements它看起来像这样(注意我之前从未使用过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;