错误日志指出我有MySQL连接错误,但脚本运行良好
首先,感谢迄今为止从StackOverflow收到的所有帮助。我学到了很多。错误日志指出我有MySQL连接错误,但脚本运行良好
再一次,我构成了一个我已经搜索过的基本问题,但找不到确切的答案。在这里或在PHP.net上。
这有点像这家伙问,但不完全:Mysql throwing query error yet finishing query just fine-why?
于是,我看到了我的错误日志膨胀起来,当我检查我的网站目录,并打开发现一堆错误一直以来我记录写了这个新的管理区域。我知道某些东西显然是错误的,因为我的脚本会抛出错误,但奇怪的是,脚本实际上运行并在不中断的情况下提取所需的所有数据。
日志包含:
PHP的警告:请求mysql_query()[function.mysql查询]:拒绝访问用户SomeUser的'@ 'localhost' 的(使用密码:NO)在/ home/mysite的/ adminconsole .php on line 15
我不明白,因为那条线是我设置连接的地方......完全相同的方式我在网站上的任何地方都没有问题。
的错误后,我已经抛出这些在同一时间
[09-APR-2010 8时44分十八秒] PHP的警告:请求mysql_query()[function.mysql查询]:一个链接服务器无法建立在/home/mysite/adminconsole.php在线15
[09-Apr-2010 08:44:18] PHP警告:mysql_fetch_array():提供的参数不是有效的MySQL结果资源/home/mysite/adminconsole.php在线16
从我在其他家伙线程中读到的问题是查询的内容也许呢?也许我的查询格式不正确?
非常感谢您提供的任何指导。
-Rob
地址:多米尼克
多米尼克
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);
如果$ adminusr ISN” t第一次设置,没有连接到数据库。在标题调用之后放置一个exit()调用。
标题被调用后,脚本继续运行。这就是为什么你会在日志中发现错误,但在使用该网站时不会注意到它们。
webbiedave ...嗯,它显然设置,因为所有的查询依赖它来拉适当的记录(S),正如我所提到的,数据拉好...只是记录这个错误,现在,它不再记录!?!?!奇怪的!谢啦! – 2010-04-09 14:48:53
我在发布更多代码后添加到了我的答案中。 – webbiedave 2010-04-09 14:50:07
呃...是的..就是这样。如果登录失败,显然没有建立$ adminusr,就像你说的那样,该脚本没有定义$ adminusr。 谢谢 – 2010-04-09 14:59:12
可能是什么问题是MySQL允许每个用户只有一个连接和你正在尝试连接不止一次引起拒绝访问。然后你的查询运行正常,因为你已经建立了一个连接。没有代码,尽管这只是一个猜测。
谢谢伊沃...我应该在做我的每个脚本后,然后mysql_close?一位朋友告诉我这是浪费 – 2010-04-09 14:21:21
不,你不应该关闭,只是如果你已经有一个开放的连接,不要尝试连接。 – 2010-04-09 14:23:11
嗯......我试图从你的评论和Dominic的推论中推论出一些东西。也许我正在尝试与该数据库建立冗余连接?我在另一个页面上的初始登录时连接到“管理员”,但我猜连接仍然打开? 我试着再次连接建立新的变量。 – 2010-04-09 14:23:30
如果这些查询必须运行,则添加一个或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等
谢谢你特拉维斯。是的,我被剥离并逃脱......只是不想提供一个庞大的例子。感谢_fetch_assoc上的记录。将研究它,并实施 – 2010-04-09 14:37:19
'adminconsole.php'的第15行和第16行是什么?发布代码(显然用虚拟值替换密码)。 – 2010-04-09 14:14:31
这是MySQL帐户密码?我注意到你引用的错误说没有密码被传递给'mysql_connect'。 – Powerlord 2010-04-09 14:31:47
嗨OMG独角兽。是的,有一个PW,我提供它。我根本没有得到这个错误!酷的用户名顺便;) – 2010-04-09 14:34:03