代码之家  ›  专栏  ›  技术社区  ›  rob - not a robber

错误日志指出我有mysql连接错误,但脚本运行良好

  •  0
  • rob - not a robber  · 技术社区  · 15 年前

    首先,谢谢你从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()[函数.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);
    
    3 回复  |  直到 15 年前
        1
  •  2
  •   webbiedave    15 年前

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

    调用header后,脚本继续运行。这就是为什么在日志中会出现错误,但在使用站点时不会注意到这些错误。

        2
  •  1
  •   Ivo Sabev    15 年前

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

        3
  •  1
  •   TravisO    15 年前

    如果必须运行这些查询,则在代码中添加或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错误描述。

    注意:如果您使用如上所述的字符串连接,我肯定希望您是sql转义数据以防止注入。

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