mysql在查询中爆炸

时间:2013-02-22 23:21:47

标签: php mysql

好吧,我对我想做的事情是否有可能感到有点困惑。

在数据库中,字段'slot'包含表单中的信息(第一部分:第二部分:第三部分),其中:是分隔符。

我需要将$matchid与该字段的第一部分进行比较。所以我们说slot1 = 100:200:300

我需要检查$matchid是否等于数据库中任何字段的第一部分

$matchid = mysql_fetch_row(mysql_query(
     "SELECT `matchid` 
      FROM `matches` 
      WHERE `winner` = 0 AND 
            (`slot1` OR `slot2` OR `slot3` OR `slot4` OR `slot5` 
             OR `slot6` OR `slot7` OR `slot8` OR `slot9` OR `slot10`) = $matchid"
      ));

如果$matchid最初为100且slot1 = 100:200:300,则查询将不返回任何内容,但我需要将其作为匹配项。

我不知道我是否已经正确解释了这一点,但我们走了。我尝试使用爆炸但是没有真正起作用

2 个答案:

答案 0 :(得分:0)

要使其与现有数据结构一起使用,您可以执行以下操作:

SELECT `matchid` FROM `matches` 
WHERE `winner` = 0 AND (
  `slot1` LIKE "{$matchid}:%" 
  OR `slot2` LIKE "{$matchid}:%"
  /* etc, etc... */
)

话虽如此,如果将插槽分隔到自己的表中,您将获得更清晰的查询。 另外,要么转义$ matchid,要么使用准备好的声明。

答案 1 :(得分:0)

尝试:

$matchid = mysql_fetch_row(mysql_query("SELECT `matchid` FROM `matches` WHERE `winner` = 0 AND         (`slot1` OR `slot2` OR `slot3` OR `slot4` OR `slot5` OR `slot6` OR `slot7` OR `slot8` OR `slot9` OR `slot10`) = ".$matchid));

注意点连接字符串。通过这种方式,php传递了$ matchid的实际值,而在你的代码中你传递了字符串“$ matchid”。

如果$ matchid是一个整数,你必须在查询中使用strval($ matchid)。