错误日志表明我有MySQL连接错误,但脚本运行正常

时间:2010-04-09 14:11:48

标签: php mysql

首先,感谢我迄今为止从StackOverflow获得的所有帮助。我学到了很多东西。

再次,我提出了一个我搜索过的基本问题,但找不到确切的答案。在这里或在PHP.net上。

这有点像这个人问的,但不完全是:Mysql throwing query error yet finishing query just fine-why?

所以,当我检查我的站点目录时,我看到我的错误日志膨胀了,并且打开时注意到自从我编写这个新的管理区域以来已经记录了一堆错误。我知道有一些东西显然是我的脚本错误被抛出,但奇怪的是,脚本实际上贯穿并拉出我需要的所有数据而不会破坏。

日志包含:

PHP警告:mysql_query()[function.mysql-query]:第15行/home/mysite/adminconsole.php中用户“someuser”@“localhost”(使用密码:NO)拒绝访问

我不明白,因为那条线就是我设置连接的地方......就像我在网站上的其他地方一样,没有问题。

在那个错误之后,我同时抛出了这些

[09-Apr-2010 08:44:18] PHP警告:mysql_query()[function.mysql-query]:无法在第15行的/home/mysite/adminconsole.php中建立到服务器的链接

[09-Apr-2010 08:44:18] PHP警告:mysql_fetch_array():提供的参数不是第16行/home/mysite/adminconsole.php中的有效MySQL结果资源

从我在其他人的线程中读到的,问题是查询的内容可能吗?也许我的查询格式不正确?

非常感谢您提供的任何指导。

-Rob

ADD:To Dominic

session_start();
if (isset($adminusr))
{
mysql_connect("localhost","user","pw") or die(mysql_error());
mysql_select_db("my_db") or die(mysql_error());
}

else    {
header("location:admin.php");
}

LINE 14 #SETUP THE QUERIES HERE FROM SESSION INFO

LINE 15 $sql1=mysql_query("SELECT * FROM admins WHERE username='$adminusr'"); ///connecting to the admin DB

LINE 16 $result1=mysql_fetch_array($sql1);

### OLD BAR INFO QUERY
$sql2=mysql_query("SELECT * FROM bars WHERE bar_id='$result1[bar_id]'"); ///connecting to the old bars DB
$result2=mysql_fetch_array($sql2);

###LIQUOR QUERIES
$sql3=mysql_query("SELECT * FROM inv_beer WHERE bar_id='$result1[bar_id]'"); ///connecting to the BEER INVENTORY DB
$beer_results=mysql_fetch_array($sql3);

3 个答案:

答案 0 :(得分:2)

如果第一次未设置$ adminusr,则不会与数据库建立连接。在标题调用之后调用exit()调用。

调用标头后,脚本继续运行。这就是为什么你在日志中出现错误但在使用网站时没有注意到它们的原因。

答案 1 :(得分:1)

问题可能是MySQL每个用户只允许一个连接,并且您尝试多次连接导致访问被拒绝。然后您的查询运行正常,因为您已经建立了一个连接。没有代码虽然只是猜测。

答案 2 :(得分:1)

如果这些查询必须运行,那么添加一个或者die();像这样的代码:

$sql1=mysql_query("SELECT * FROM admins WHERE username='$adminusr'") or die('Critical error  on line #'. __LINE__ .'while trying to SELECT from admins table:<br>'. mysql_error());

通过这种方式,您可以确切地知道错误的位置,您尝试执行的操作以及MySQL错误说明。

PS:如果你正在使用上面的字符串连接,我肯定希望你是SQL转义数据以防止注入。

PPS:我建议您使用mysql_fetch_assoc()而不是_array(),因为它不会浪费时间或内存填充键0,1,2等