未定义的偏移量

时间:2010-07-27 08:11:49

标签: php

$query = "SELECT COUNT(t.id), SUM(t.num_replies) FROM threads AS t WHERE t.forum_id=$forum_id";

$result = mysql_query($query);
list($num_threads, $num_posts) = mysql_fetch_assoc($result);

等于:

Notice: Undefined offset: 1 in C:\wamp\www\includes\functions.php on line 11

Notice: Undefined offset: 0 in C:\wamp\www\includes\functions.php on line 11

我有什么想法可以摆脱这些通知吗?

5 个答案:

答案 0 :(得分:3)

http://php.net/mysql_fetch_assoc

  

array mysql_fetch_assoc ( resource $result )

     

返回关联数组 ...

http://php.net/manual/en/function.list.php

  

array list ( mixed $varname [, mixed $... ] )

     

注意:list()仅适用于数值数组,并假设数字索引从0开始。

您无法通过关联数组从list分配变量。要么使用mysql_fetch_row,要么通常更好,只需使用$row = mysql_fetch_assoc($result)并使用$row作为数组。你真的不想使用_fetch_row,因为你的应用程序的完整性取决于参数在查询中的顺序,这可能很容易破坏。

答案 1 :(得分:2)

list()仅适用于枚举数组。 mysql_fetch_assoc()函数返回一个关联函数。请改用mysql_fetch_row()

答案 2 :(得分:1)

如果您遇到语法错误或者mysql_query存在问题,此代码可能会进一步错误。如果mysql_query没有返回有效结果,那么将其传递给mysql_fetch_assoc或mysql_fetch_numeric将导致错误。

我建议您在尝试使用其返回值中的信息之前验证mysql_query和mysql_fetch_ *的返回值。

$result = mysql_query($query) or die('query error: ' . mysql_error());
$num_threads = $num_posts = 0;
if($result !== false && ($row = mysql_fetch_row($result)) !== false) {

     $num_threads = $row[0];
     $num_posts   = $row[1];
}

答案 3 :(得分:0)

list()函数仅适用于数值数组,因此您必须使用mysql_fetch_row()代替:

list($num_threads, $num_posts) = mysql_fetch_row($result);

答案 4 :(得分:0)

如上所述,您不需要使用mysql_fetch_assoc因为它将同时返回数字和字符串。所以对于两个值,您将得到四个。 这就是为什么你有一个未定义的偏移量。你要求list()来自一个有四个值的数组中的两个变量

$result = mysql_query($query);
list($num_threads, $num_posts) = mysql_fetch_array($result, MYSQL_NUM);

通过使用mysql_fetch_array,您可以通过附加参数来指定您只需要数字indeces; MYSQL_NUM