0

我正在使用 php 从 mysql 查询 home_team 或 away_team 列包含给定值。我知道数据库中存在此类值的记录。但是,由于某种原因,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 变量不正确。我正在查看数据库中符合查询中指定条件的一些行。

有任何想法吗?

谢谢,

4

3 回答 3

1

您正在使用COUNT(*). 这不会为您提供该字段的值。 COUNT(*)通常用于衡量返回了多少结果。

您实际上需要做的是选择列名,或者选择与条件匹配的整行。像这样的东西-

SELECT * FROM current_season_games 
WHERE home_team = '".$given_team."' OR away_team = '".$given_team."'")
于 2013-01-10T22:47:06.910 回答
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像您的变量名称所指示的那样返回 a 。它返回一个结果集,然后您可以检查该结果集以检索该实际数据。

于 2013-01-10T22:52:29.053 回答
0

这里有几件事要检查:

  • PHP 是否连接到同一个主机和数据库?(对于一些开发人员来说,这是一个“DOH!”时刻,他们有多个数据库......一个本地数据库,一个在测试服务器上。)您确定要查询同一张表吗?

  • 尝试测试一个更简单的查询,例如SELECT COUNT(*) FROM current_season_games查看是否可以返回任何非零计数

  • 尝试将查询放入字符串中,并在执行之前回显字符串

  • 这是一个 InnoDB 表,并且您要计算的行是否已提交?(添加行的会话是否执行了 START TRANSACTION、插入行,然后还没有提交它们?(对于使用多个环境(例如 SQLyog 和 Web 服务器)的一些开发人员来说,这是一个 DOH!时刻。(一个单独的事务隔离级别为 REPEATABLE READ 的会话将看不到未提交的行)

  • 数据库中的该列是否使用区分大小写的排序规则,其中谓词(WHERE 子句)中的相等比较被处理为区分大小写与不区分大小写?

这些都不能解决您的问题,但是如果没有更多信息,就不可能(从这里)说出问题所在。但这是您可以检查的几件事。

于 2013-01-10T23:48:39.683 回答