这是我的php脚本..首先它将一行数据插入数据库。然后它再次获取该行(在同一个脚本中)。但现在它返回0行。但是,输入的行存在于数据库中。
此外,还有两行是在创建数据库时创建的。如果我写一个查询来获取旧行,它返回值没有问题。而且serverID和UserID运行良好。
$conn = new mysqli($sever, $uname, $pass, $dbname);
if ($conn->connect_error) {
die("Internal Server Error!");
}
//add new row
$un = $_POST['uname'] ;
$ue = $_POST['uemail'];
$up = $_POST['upass'];
$sql = "INSERT INTO TBuser (username, email, password, serverID)
VALUES('" . $un . "',' " . $ue . "',' " . $up . "', '1')";
$conn->query($sql);
if ($conn->query($sql) === FALSE) {
die("Internal Server Error! Ex000105 0 <br>" .
mysqli_error($conn) . '<br>'. $sql);
}
$sql = "SELECT * FROM TBuser WHERE email LIKE '" . $ue . "'";
$results = $conn->query($sql);
if ($results->num_rows == 0) {
die("Internal Server Error! Ex000105 1".
mysqli_error($conn) . '<br>'. sql . '<br>'
. mysqli_error ($conn) . '<br>'. $results->num_rows );
}
这是我的桌子。当数据库创建时,前两行由另一个php脚本创建。第三行由上面的脚本创建。
mysqli_error($ conn)未返回任何错误消息。
Array ( [userID] => 1 [username] => namindu [email] => namindu@live.com [password] => oh!mygod [serverID] => 1 )
Array ( [userID] => 2 [username] => kamal [email] => namindus8@live.com [password] => oh!mygod [serverID] => 1 )
Array ( [userID] => 56 [username] => Namindu [email] => nn@h.com [password] => k [serverID] => 1 )
感谢您的帮助。
答案 0 :(得分:1)
$sql = "INSERT INTO TBuser (username, email, password, serverID)VALUES('" . $un . "',' " . $ue . "',' " . $up . "', '1')";
现在怎么样?
' " . $ue . "'
空格{email},然后搜索LIKE '" . $ue . "'
中没有通配符。但是,您确实存在一些SQLInjection漏洞。
但是要明确:
" $ue" != "$ue" /// ie. email = ' name@example.com';
如果你完成了LIKE '%".$ue."'
,你就不会注意到这一切。你还有另一个' ".$up."'
密码,非常肯定会产生一些问题。但你可以通过使用&#34; Prepared Statements&#34;来解决所有这些问题,因为准备好的语句只需要?
为mysqli,而不是引号....
P.S。如果你没有看到它,那没关系。在我去之前的几分钟和我说话啊#啊;#&#34;