我有这个功能:
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?
非常感谢任何帮助!
答案 0 :(得分:3)
您的变量$bd_id
,$bd_pass
和$bd
在函数内部不可见,因为它们可能在全局scope中声明,而不是在该函数的本地范围内声明。
您可以使用global
keyword,$GLOBALS
variable或passing 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();