2013-03-14 63 views
0

我一直在这个工作了一个多月,并且在这段代码中看不到任何错误。它运行良好,直到两个月前。我开始得到这个错误:警告:mysql_num_rows():提供的参数不是第41行(第41行是$ num = mysql_num_rows($ result);)的functions.php中的有效MySQL结果资源。我确定它与数据库连接并在整个文件中检查了括号。当我使用mysql_error检查错误时,我挂断电话查询在第40行为空,如下所示。我花了很多小时试图通过阅读帖子在这里stackoverflow,但需要更多的帮助。谢谢。查询是空的,其他错误

function query_sql($sql) 
{ 
$username="somename"; 
$password="mypassword"; 
$database="database2"; 
$link=mysql_connect("sqlserver.myserver.net",$username,$password); 
@mysql_select_db($database,$link); 
$result = mysql_query ($sql)or die(mysql_error()); 
$num=mysql_num_rows($result); 
mysql_close(); 
return $result; 
} 

以下是包含$ sql变量的主页面中的代码。

<?php 
include 'modules/functions.php'; 
update_log($_SERVER['PHP_SELF'], ""); 
if(isset($_SERVER['PHP_AUTH_USER'])) 
{ 
    $User = $_SERVER['PHP_AUTH_USER']; 
    $sql = "select Username from users where Username = '".$_SERVER['PHP_AUTH_USER']."'"; 
    $get_results = query_sql($sql) or die('Query failed: ' . mysql_error() . "<br />\n$sql"); 
    $row = mysql_fetch_assoc($get_results); 
} 
else 
{ 
    header('Location: ../index.php'); 
} 

$sql = 'select Name, Category, Category2, Private, Staff from users where Username = "'.$User.'"'; 
$get_user_access = query_sql($sql); 
$sql = ''; 
+4

“查询为空”表示您的$ sql变量是空字符串。你传递给你的功能是什么?调试。 – mario 2013-03-14 22:16:12

+0

我编辑了主帖以包含更多的代码,谢谢。 – 2013-03-15 18:40:33

+0

所示代码甚至不会运行:'$ get_user_access $ get_user_access = query_sql($ sql);'。向我们展示您实际运行的代码。 – 2013-03-15 19:26:11

回答

1

开始通过注释掉或query_sql()函数定义删除mysql_close();

下面是这背后

推理你打电话mysql_close(),然后调用mysql_fetch_assoc($get_results); PHP将尝试使用默认设置重新连接到数据库后 - 但没有一个有效的SQL查询来获取的行数/取数据出错了。

这里是我的建议 - 不要反复打开和关闭数据库连接,在顶部打开它 - 运行所有的查询,并关闭它的底部或使用PHP垃圾回收器关闭脚本。

+0

我试过了,但仍然得到相同的“警告:mysql_num_rows():提供的参数不是有效的MySQL结果”错误。 – 2013-03-19 15:30:29

+0

你有没有得到任何特定的mysql错误?或只是PHP错误? – 2013-03-19 21:40:32