【问题标题】:Error Log states that I have MySQL connect error, yet script runs fine错误日志指出我有 MySQL 连接错误,但脚本运行良好
【发布时间】:2010-04-09 14:11:48
【问题描述】:

首先,感谢 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 结果资源

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

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

-罗伯

添加:致多米尼克

多米尼克

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);

【问题讨论】:

  • adminconsole.php 的第 15 和 16 行是什么?发布代码(显然用虚拟值替换密码)。
  • 这个 MySQL 账户有密码吗?我注意到你引用的错误说没有密码被传递给mysql_connect
  • 嗨 OMG 独角兽。是的,有一个 PW,我提供它。我根本没有收到这个错误!酷用户名顺便说一句;)

标签: php mysql


【解决方案1】:

如果第一次没有设置 $adminusr,则不会连接到数据库。在标头调用之后放置一个 exit() 调用。

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

【讨论】:

  • webbiedave ...好吧,它显然是设置的,因为所有查询都依赖它来提取适当的记录,正如我所提到的,数据拉得很好......只是记录了这个错误现在,它不再记录了!?!?!诡异的!谢谢大佬!
  • 明白了……是的……就是这样。如果登录失败,显然没有建立 $adminusr,就像你说的那样,脚本运行时没有定义 $adminusr。谢谢你
【解决方案2】:

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

【讨论】:

  • 谢谢 Ivo... 我应该在运行每个脚本之后执行 mysql_close 吗?一个朋友告诉我这是浪费
  • 不,你不应该关闭,如果你已经有一个打开的连接就不要尝试连接。
  • 嗯...我试图从您的评论和多米尼克的评论中推断出一些东西。也许我正在尝试与该数据库建立冗余连接?我在另一个页面的初始登录时确实连接到“管理员”,但我猜连接仍然打开?我尝试再次连接以建立新变量。
  • 有这样的东西: if (!$db) { $db = mysql_connect(...);但我仍然不确定这是否是原因。你有多个mysql_connect吗?
  • 没有.. 只有一个连接。请查看顶部的编辑位,包括整个问题页面的所有 PHP 和 DB 内容谢谢
【解决方案3】:

如果这些查询必须运行,则添加 or 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 的推荐。将对其进行调查并实施
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-09
  • 1970-01-01
  • 2017-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多