$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
我有什么想法可以摆脱这些通知吗?
答案 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