我已为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();
?>
答案 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级别错误。
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";
答案 2 :(得分:0)
您作为SYSTEM用户连接时没有密码,显然不允许连接到MySQL服务器。
答案 3 :(得分:0)
你真的应该清理你的问题。这只是您发布的早期问题的重新发布。
我相信你的代码中有一个拼写错误,可能会导致你的问题。您将连接参数定义为$DB_SERVER
等,但您在$DBSERVER
电话中使用了mysql_connect()
。您需要将下划线添加到connect connect中的变量名称。