PHP中的MySQL连接错误

问题描述:

我已经为root设置了密码并授予root的所有权限。它为什么说它被拒绝?PHP中的MySQL连接错误

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



?> 
+3

请不要回滚修订以处理代码格式。 – Yacoby 2010-04-16 11:40:44

+1

http://stackoverflow.com/questions/2650033/i-am-getting-error-like-mysql-connect-acces-denied-for-systemlocalhostusing-p – 2010-04-16 11:44:13

+0

global $ DBSERVER,$ DBUSER,$ DBPASS, $ DBNAME; $ DBSERVER =“localhost”; \t $ DBUSER =“root”; \t $ DBPASS =“”;(有我设定的密码) \t $ DBNAME =“photo_gallery”; – Vicky 2010-04-16 11:53:46

缺少第二次在

class MySQLDatabase 
{ 
    public $connection; 
    function _construct() 
    { 

强调了__construct()解释了所有的症状(MySQL的_query提高警告,没有未定义的变量声明,不管你做什么,使参数提供给function open_connection()它doesn不工作,因为它从来没有被调用,访问被拒绝系统 @ localhost,因为你的web服务器作为localsystem运行,因此system是默认的mysql连接的默认用户名,...)

当您通过$database = new MySQLDatabase();创建新对象时,_construct()方法不会被调用,因此既不是$ this-> open_connection()也不是因此没有赋值给属性$ connection,而是保留为NULL,并且没有连接到mysql服务器建立了
现在,当你调用$database->query('something');并没有数据库连接的mysql_query()尝试建立默认连接,在http://docs.php.net/mysql_query解释说:

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

  • 固定在_construct错字()
  • 通过这 - $>连接mysql_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类,使用gazillion现有的类之一,最好是具有更广泛接受度的类之一。
+1

+1,如果可以的话,我会给出另一个“不要推出自己的MySQL课程”的+1。 – chendral 2010-04-16 16:29:43

+0

thnx为你提供帮助 – Vicky 2010-04-18 20:52:18

您还没有在当前variable scope中定义的任何的$DBSERVER$DBUSER$DBPASS

如果这些变量是在全球范围内,你必须添加以下到使用它们的功能:

global $DBSERVER,$DBUSER,$DBPASS; 

如果你打算使用在open_connection功能,您必须首先取消注释定义,然后评价变量然后更改传递给mysql_connect函数的参数。

您正在以SYSTEM用户身份连接,但没有密码,显然不允许连接到MySQL服务器。

+0

只有两个像根@ LOCALHOST和127,0 ... @ LOCALHOST有没有系统的东西...我已经为它设置了密码 – Vicky 2010-04-16 11:46:05

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

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

+0

实际上没有参数错误,我试图改变它。 define('DB_SERVER','')? null:define(“DB_SERVER”,“localhost”);这是在CONFIG.PHP文件中我打电话使用INCLUDE(“CONFIG”);但我不知道它不打电话给这个文件。为什么我不知道... PLZ HELP – Vicky 2010-04-16 11:45:02

+0

首先,您需要做:include(“config.php”)而不仅仅是include(“config”)。上面你仍然需要遵循Yacoby的建议。 – 2010-04-16 11:52:07

+4

由于您的CapsLock键显然有问题,您是否检查过变量和密码?他们可能全都戴着帽子呢? (对不起,这没有任何帮助..但我无法抗拒,真的很抱歉) – VolkerK 2010-04-16 11:53:49