PHP中的MySQL连接错误

时间:2010-04-16 11:31:43

标签: php mysql

我已为root设置了密码并授予root的所有权限。为什么说它被拒绝了?

****mysql_query() [function.mysql-query]: Access denied for user 'SYSTEM'@'localhost' (using password: NO) in C:\wamp\www\photo_gallery\includes\database.php  on line 56

Warning: mysql_query() [function.mysql-query]: A link to the server could not be established in C:\wamp\www\photo_gallery\includes\database.php on line 56

The Query has problemAccess denied for user 'SYSTEM'@'localhost' (using password: NO)

代码如下:

<?php
include("DB_Info.php");

class MySQLDatabase
{
    public $connection;
    function _construct()
    {
        $this->open_connection();
    }
    public function open_connection()
    {   
        $this->connection = mysql_connect($DB_SERVER,$DB_USER,$DB_PASS);
        if(!$this->connection)
        {
            die("Database Connection Failed" . mysql_error());
        }
        else
        {
            $db_select = mysql_select_db($DB_NAME,$this->connection);
            if(!$db_select)
            {
                die("Database Selection Failed" . mysql_error());
            }
        }
    }
    function mysql_prep($value)
    {
        if (get_magic_quotes_gpc())
        {
             $value = stripslashes($value);
        }
        // Quote if not a number
        if (!is_numeric($value))
        {
            $value = "'" . mysql_real_escape_string($value) . "'";
        }
        return $value;

    }
    public function close_connection()
    {
        if(isset($this->connection))
        {
            mysql_close($this->connection);
            unset($this->connection);
        }
    }
    public function query($sql)
    {

        $result = mysql_query($sql);
        $this->confirm_query($result);
        return $found_user;
    }
    private function confirm_query($result)
    {
        if(!$result)
        {
            die("The Query has problem" . mysql_error());
        }
    }

}

$database = new MySQLDatabase();



?>

4 个答案:

答案 0 :(得分:3)

您尚未在当前variable scope内定义任何$DBSERVER$DBUSER$DBPASS

如果这些变量在全局范围内,则必须将以下内容添加到使用它们的函数中:

global $DBSERVER,$DBUSER,$DBPASS;

如果您打算使用已定义的变量,然后在open_connection函数中注释,则必须先取消注释,然后更改传递给mysql_connect函数的参数。

答案 1 :(得分:2)

__construct()缺少第二个下划线
class MySQLDatabase
{
    public $connection;
    function _construct()
    {

解释所有症状(mysql _query 提出警告,没有未定义的变量通知,无论你做什么使参数可用于function open_connection()它不起作用仅仅是因为它是从未调用, system @localhost的访问被拒绝,因为您的web服务器作为localsystem运行,因此system是默认mysql连接的默认用户名,...)

当您通过$database = new MySQLDatabase();创建新对象时,方法_construct()不会被调用,因此$ this-&gt; open_connection()和因此都没有赋值属性$ connection保持为NULL并且没有建立与mysql服务器的连接 现在,当您调用$database->query('something');并且没有数据库连接时,mysql_query()会尝试建立默认连接,如http://docs.php.net/mysql_query中所述:

resource mysql_query(string $ query [,resource $ link_identifier])
[...]
如果未指定链接标识符,则假定mysql_connect()打开的最后一个链接。 如果没有找到这样的链接,它将尝试创建一个,就好像没有参数调用mysql_connect()一样。如果没有找到或建立连接,则会生成E_WARNING级别错误。

  • 修复_construct()
  • 中的拼写错误
  • 传递$ this-&gt;连接到mysql_real_escape_string(),mysql_query()和mysql_error()
  • 确保open_connection()具有所需的所有参数,例如isset($DB_SERVER,$DB_USER,$DB_PASS,$DB_NAME) or die('missing parameters');
  • 添加一些调试输出以查看它是否已被调用,例如echo "Debug: this->connection = mysql_connect($DB_SERVER,$DB_USER,$DB_PASS);\n";
  • 不要滚动你自己的MySQL类,使用大量现有的类之一,最好是更广泛接受的类。

答案 2 :(得分:0)

您作为SYSTEM用户连接时没有密码,显然不允许连接到MySQL服务器。

答案 3 :(得分:0)

你真的应该清理你的问题。这只是您发布的早期问题的重新发布。

我相信你的代码中有一个拼写错误,可能会导致你的问题。您将连接参数定义为$DB_SERVER等,但您在$DBSERVER电话中使用了mysql_connect()。您需要将下划线添加到connect connect中的变量名称。