我正在使用php从mysql查询,其中home_team或away_team列包含给定值。我知道DB中存在这些值的记录。但是,由于某种原因,PHP或MySQL告诉我它不是。我的代码如下。
$teams = array("St. Louis",
"NY Yankees",
"NY Mets",
"LA Dodgers",
"LA Angels");
foreach($teams as $given_team)
{
$query = mysql_query("SELECT COUNT(*) FROM current_season_games WHERE home_team = '".$given_team."' OR away_team = '".$given_team."'")or die(mysql_error());
$count = mysql_result($query, 0);
echo "".$count."<br />";
}
我知道正在回显的$ count变量是不正确的。我正在查看数据库中符合查询中指定条件的一些行。
有什么想法吗?
谢谢,
兰斯
答案 0 :(得分:1)
您正在使用COUNT(*)
。这不会给你这个领域的价值。 COUNT(*)
通常用于衡量返回的结果数量。
您要做的实际上是选择列名称,或者选择符合条件的整行。像这样的东西 -
SELECT * FROM current_season_games
WHERE home_team = '".$given_team."' OR away_team = '".$given_team."'")
答案 1 :(得分:0)
在我遇到的旧代码中仍然使用已弃用的mysql_*
函数,我通常会遇到使用mysql_num_rows()
function。
从结果集中检索行数。此命令仅对返回实际结果集的SELECT或SHOW等语句有效。要检索受INSERT,UPDATE,REPLACE或DELETE查询影响的行数,请使用
mysql_affected_rows()
。
我建议您将代码更改为此类代码 -
$result = mysql_query("SELECT COUNT(*) FROM current_season_games WHERE home_team = '".$given_team."' OR away_team = '".$given_team."'")or die(mysql_error());
$count = mysql_num_rows($result);
请注意,mysql_query()
函数不会返回$query
,因为您的变量名称表示。它返回一个结果集,然后您可以检查该结果集以检索实际数据。
答案 2 :(得分:0)
以下是一些要检查的事项:
是PHP连接到同一主机和数据库? (对于一些开发人员来说,这是一个'DOH!'时刻,当他们有多个数据库时......一个本地,一个在测试服务器上。)你确定要查询同一个表吗?
尝试测试更简单的查询,例如SELECT COUNT(*) FROM current_season_games
查看是否可以返回任何非零计数
尝试将查询放入字符串中,并在执行之前回显字符串
这是一个InnoDB表,并且您尝试计算的行是否已提交? (添加行的会话是否执行START TRANSACTION,插入行,然后还没有提交它们?(对于使用多个环境的某些开发人员(例如SQLyog和Web服务器),这是一个DOH!时刻。)具有事务隔离级别REPEATABLE READ的会话将看不到未提交的行)
是数据库中使用区分大小写的排序规则的列,其中谓词(WHERE子句)中的相等比较是作为区分大小写而不区分大小写处理的?
这些都不能解决你的问题,但是如果没有更多的信息,就不可能告诉(从这里),问题是什么。但是你可以检查一些事情。