即使存在一行,SQL num_row也会返回0

时间:2018-03-30 01:41:55

标签: php sql database mysqli

这是我的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 ) 

感谢您的帮助。

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;