函数不返回正确的资源

时间:2009-10-08 19:39:30

标签: php

我有这个功能:

function query_dp($sql) {
    $link = mysql_connect('localhost', $bd_id, $bd_pass);
    mysql_select_db("$bd");

    if (!$link) {
        die('Could not connect: ' . mysql_error());
    }

    return mysql_query($sql) or die(mysql_error());

    mysql_close($link);
}

在主程序中,当我尝试这样做时:

echo mysql_num_rows(query_db($sql));

我得到了回报

1

当我没有将该代码封装在一个函数中并直接用于主程序时,我得到了获取的行数。

该函数不返回资源但是返回...整数? WTF?

非常感谢任何帮助!

4 个答案:

答案 0 :(得分:3)

您的变量$bd_id$bd_pass$bd在函数内部不可见,因为它们可能在全局scope中声明,而不是在该函数的本地范围内声明。

您可以使用global keyword$GLOBALS variablepassing them to the function来访问全局变量。

答案 1 :(得分:1)

你对mysql_close的调用意味着你不再拥有mysql_num_rows所需的mysql资源的链接

答案 2 :(得分:1)

问题出在“或”运算符中。你的函数返回“mysql_query($ sql)或die(mysql_error())”表达式的结果,这是1或0.我建议你使用这样的东西:

$query_result = mysql_query($sql);
if (!$query_result) {
    die(mysql_error());
}
return $query_result;

此函数的最后一行“mysql_close($ link)”永远不会被调用。

答案 3 :(得分:0)

这不能直接回答您的问题,但您不应该使用原始的mysql界面。这是笨重和程序性的。看看mysqli interface。如果您已经使用支持语言的标准,请不要尝试包装旧函数:D

上面的代码就变成了

$m = new MysqlI(...);
$rc = $m->query(...);
echo $rc->num_rows();