代码之家  ›  专栏  ›  技术社区  ›  Jack Roscoe

“mysql_fetch_array()提供的参数不是有效的mysql结果资源”的问题

  •  1
  • Jack Roscoe  · 技术社区  · 14 年前

    我有一个数据库,其中有一个表,其中包括一列日期(列名为“日期”),格式为Y-M-D。

    我要提取本月已记录的所有数据行,因此使用以下查询:

    $year_month = date("Y-m");
    $query = "SELECT date FROM tracker WHERE date LIKE '$year_month%'";
    

    当我执行查询并尝试以可视方式输出时,我得到错误“warning:mysql_fetch_array():所提供的参数不是第64行上有效的mysql结果资源”。

    第64行是以下循环的开始:

    while($row = mysql_fetch_array($result, MYSQL_ASSOC)
    {
        echo "Name :{$row['date']} <br>";
    }
    

    我搜索过谷歌,也在这里查看过,但我似乎无法解决这个看似简单的问题。据我所知,实际的查询执行得很好。

    有什么想法吗?

    **附加-调用下面的mysql查询**

    $result = mysqli_query($conn, $query);
    

    $conn指以下行:

    $conn = @mysqli_connect($dbhost, $dbuser, $dbpass, $dbname) or die ('Error connecting to MySQL');
    
    4 回复  |  直到 14 年前
        1
  •  2
  •   Mike Caron    14 年前

    我突然想到两件事:

    1. 您确定这是与该结果匹配的查询吗?像这样的查询 insert delete 没有结果。它们返回一个指示成功的布尔值。

    2. 是否检查以确保查询成功?在你打电话的那一行之后 mysql_query ,确保检查结果。如果是假的,你可以打电话 mysql_get_error 找出问题所在。

    编辑:好吧,你真正的问题是你在混合 mysql_* mysqli_* 命令。你需要使用其中一个。

        2
  •  2
  •   Sam Bisbee    14 年前

    像这样的东西应该很管用…

    if(!$result)
      throw new Exception("MySQL Error: ".mysql_error()." (#".mysql_errorno().")");
    
    if(mysql_num_rows($result) <= 0)
      echo "No results found.";
    else
      while($row = mysql_fetch_array($result, MYSQL_ASSOC))
        echo "Name :{$row['date']} <br>";
    

    如果你不理解你所犯的错误 mysql_error() mysql_errorno() ,然后张贴输出,我们应该能够帮助它。

        3
  •  0
  •   shevski    14 年前
    $query = "SELECT date FROM tracker WHERE date LIKE '$year_month%'"; 
    

    应该是

    $query = "SELECT `date` FROM tracker WHERE `date` LIKE '$year_month%'"; 
    

    日期是SQL中的保留字。

    查找更多示例 here

        4
  •  0
  •   Gajendra Bang    14 年前

    日期字段的数据类型是什么,如果是日期类型,则应尝试以下操作:

    $query = "SELECT date FROM tracker WHERE year(date)='".date("Y")." and month(date) = '".date("m")."'";
    $year_month = date("Y-m");
    
    $result = mysql_query($query);
    while($row = mysql_fetch_array($result, MYSQL_ASSOC)
    {
        echo "Name :{$row['date']} <br>";
    }