我学习了一年前的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_hash
和password_verify
。