我学习了一年前的Unity客户端-PHP服务器-数据库集成在线教程。代码似乎执行得很好,它完美地到达了“echo”success“行等。
然而,当我查看我的数据库时,却什么也没有。它是空白的,我不知道为什么。
注意:在线教程使用mysql…而我使用的是(非减损)mysqli…但似乎没有太大的区别,但我是php编程的新手,只有很少的经验,所以很可能我错了?

<?php
/**
 * Created by PhpStorm.
 * User: Josh
 * Date: 09/04/2016
 * Time: 14:11
 */

$Username = $_REQUEST["Username"];
$Password = $_REQUEST["Password"];

$Hostname = "localhost";
$DBName = "statemilitaryrpdb";
$User = "root";
$PasswordP = "";

$link  = mysqli_connect($Hostname, $User, $PasswordP, $DBName) or die ("Can't Connect to DB");
if (!$Username || !$Password) {
    echo "Empty";
} else
{
        $SQL = "SELECT * FROM accounts WHERE Username = '" . $Username ."'";
        $Result = @mysqli_query($link, $SQL) or die ("DB ERROR");
        $Total = mysqli_num_rows($Result);
        if($Total == 0)
        {
            $insert = "INSERT INTO 'accounts' ('Username', 'Password') VALUES ('" .$Username . "', MD5('" . $Password . "'), 0)";
        $SQL1 = mysqli_query($link, $insert);
        $Result2 = @mysqli_query($link, $SQL) or die ("DB ERROR");
        echo(mysqli_num_rows($Result2));
    }
    else
    {
        echo"Username Already Used";
    }
}

mysqli_close($link);

最佳答案

首先,查询只有两列,但插入了3个值:

$insert = "INSERT INTO 'accounts' ('Username', 'Password') VALUES ('" .$Username . "', MD5('" . $Password . "'), 0)";


用户名
密码
要插入的值
$用户名
MD5($密码)

因此,并不是所有的值都将被插入。
其次,对于与mysql相关的名称,需要使用反勾号而不是单引号。
因此,这:
INSERT INTO 'accounts'

应该是:
INSERT INTO `accounts`

第三,您的代码易受mysql注入的攻击,您应该使用mysqli_real_escape_string()来防止它:
$Username = mysqli_real_escape_string($link, $_REQUEST["Username"]);
$Password = mysqli_real_escape_string($link, $_REQUEST["Password"]);

提示:不应抑制错误消息:
@mysqli_query($link, $SQL)

删除@以启用错误报告。它在诊断语法错误时非常有用。
另外,不应该使用md5()散列密码,因为它不太安全。改用password_hashpassword_verify

07-24 18:58
查看更多