PHP 中的意外 T 变量

unexpected T variable in PHP

我是 PHP 的新手,需要一些帮助。 我很确定这可能是最常见的问题之一并且有一个简单的修复方法,但我一直在尝试。我会很愚蠢的

好的,这是我的问题: 每次我去我的本地主机尝试打开我的 PHP 网站它不会因为我每次都收到这个错误。

"Parse error: syntax error, unexpected '$db' (T_VARIABLE) in C:\xampp\htdocs\exam\register.php on line 4"

这是我的 PHP 代码。

    <?php
    session_start()

    $db = mysqli_connect("localhost", "root", "", "authentication");

    if (isset($_POST['register_btn'])) {
        session_start();
        $username = mysql_real_escape_string($_POST['username']);
        $emailaddress = mysql_real_escape_string($_POST['emailaddress']);
        $password = mysql_real_escape_string($_POST['password']);
        $password2 = mysql_real_escape_string($_POST['password2']);

        if ($password == $password2) {
            $password = md5($password);
            $sql = "INSERT INTO users(username, email, password) VALUES ('$username', '$emailaddress', '$password')";
            mysql_query($db, $sql);
            $_SESSION['message'] = "You are now registered!";
            $_SESSION['username'] = $username;
            header("location: home.php");
        }else {
            $_SESSION['message'] = "The two passwords do not match";
        }   
    }
?>

session_start() 之前的行中缺少一个分号 (;)。这就是解析器无法识别下一行中的变量 $db 的原因。

session_start(); // <-- this semicolon is needed

$db = mysqli_connect("localhost", "root", "", "authentication");

但是您的代码中还有其他问题。您正在混合 mysql_mysqli_ 扩展。要连接到数据库,您正在使用 mysqli_connect;为了转义字符串,您使用 mysql_real_escape_stringmysql_query。这行不通。

首先,请删除 mysql_* 扩展。它已在 PHP 5 中弃用,在 PHP 7 中完全删除

现在,您的代码对 SQL injection related attacks. Please learn to use Prepared Statements 开放。您可以使用 mysqliPDO

其次,请不要使用md5来加密您的密码。它很旧,发现有问题。使用标准 PHP 函数 password_hash() and password_verify(). Do Read: Secure hash and salt for PHP passwords

第三,你已经打了两次session_start()。请去掉第二个 session_start() 函数调用。