php建立连接失败

时间:2012-03-05 09:29:44

标签: php sql

我正在尝试一些非常基本的东西,但由于某种原因它无法正常工作!基本上我正在尝试为我的网站创建一个新的用户名和密码。它仅用于测试。当我提交请求时,我明白了:

  

警告:mysql_real_escape_string()[function.mysql-real-escape-string]:在/home/khali197/public_html/test/enroll.php中拒绝用户'santoshs'@'localhost'(使用密码:NO)的访问权限在第27行

我不知道谁是santoshs在这里显示@ localhost。在家里它显示了不同的人。会是什么呢?

我有以下代码来尝试实现我的目标......真的非常简单:

<?php
class ServerConnection{

    function connect(){
        $mysqli = new mysqli("localhost", "dsdssd_admin", "sddsdsd", 
 "khadsdsli197_dsd");
        if ($mysqli->connect_errno) {
                echo "Failed to connect to MySQL: (" . 
$mysqli->connect_errno . ") " .
                    $mysqli->connect_error;
        }
        //echo $mysqli->host_info . "\n";

    }
}
?>

register.php表格:

<form name="register" action="enroll.php" method="post">
Username: <input type="text" name="username" maxlength="30" />
Password: <input type="password" name="pass1" />
Password Again: <input type="password" name="pass2" />
<input type="submit" value="Register" />
</form>

以及处理该表单的表单,即enroll.php:

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

//retrieve our data from POST
$username = $_POST['username'];
$pass1 = $_POST['pass1'];
$pass2 = $_POST['pass2'];
if($pass1 != $pass2)
    header('Location: register_form.php');
if(strlen($username) > 30)
    header('Location: register_form.php');

$hash = hash('sha256', $pass1);

//creates a 3 character sequence
function createSalt()
{
    $string = md5(uniqid(rand(), true));
    return substr($string, 0, 3);
}


$salt = createSalt();
$hash = hash('sha256', $salt . $hash);
$connection = new ServerConnection();
$connection->connect();
$username = mysql_real_escape_string($username);
$query = "INSERT INTO users ( username, password, salt )
        VALUES ( '$username' , '$hash' , '$salt' );";
mysql_query($query);
mysql_close();
header('Location: index.php');

?>

任何帮助都将受到高度赞赏!提前致谢

3 个答案:

答案 0 :(得分:1)

MySQL不是MySQLi。如果您使用的是MySQLi扩展,请不要使用mysql_real_escape_string功能。它们是两个完全不同的数据库驱动程序。

答案 1 :(得分:1)

当你调用mysql_real_escape_string()函数时,它会搜索之前打开的 mysql 连接,而不是 mysqli 连接。如果找不到,则尝试与系统登录用户打开新连接。如果您的系统用户名是santoshs,那么这就是原因。

解决方案是更改ServerConnection类以使用mysql扩展名或使用enrole.php中的mysqli扩展名

答案 2 :(得分:0)

当你调用mysql_real_escape_string()意味着你没有在mysql_connect()中捕获错误时你看到了错误 - 所以即使在考虑用户是什么之前,很明显代码正在运行的不是您向我们展示的代码。

尝试在ServerConnection.php中的mysql_connect()处添加一些错误检测,并检查用户santoshs的权限