PHP Mysqli查询返回false

问题描述:

我有一个mysql数据库和一个用户表。我试图匹配用户名和密码。我的查询方法返回false,但我从MySQL数据库检查它,它应该是真实的。任何人都可以找出错误发生的原因吗?PHP Mysqli查询返回false

我已经看到了类似的问题在stackoverflow但nothnig似乎工作。 谢谢。

connect.php

<?php 
ini_set('display_errors', 1); 
ini_set('display_startup_errors', 1); 
error_reporting(E_ALL); 
if(isset($_GET['Login'])){ 
// Create connection 
    $config = parse_ini_file('config.ini'); 
    $conn = new mysqli($config['host'], $config['username'], 
    $config['password']); 
// Check connection 
if ($conn->connect_error) { 
    die("Connection failed: " . $conn->connect_error); 
} 
echo "Connected successfully\n"; 
$username = $_GET['username']; 
$password = $_GET['password']; 
var_dump($username); 
var_dump($password); 
$sql="SELECT * FROM `User` WHERE `username`='$username' and `password`='$password'"; 
var_dump($sql); 
$result=$conn->query($sql); 
var_dump($result); 
$count=$result->num_rows;//This is line 37 
var_dump($count); 
// If result matched $username and $password, table row must be 1 row 
if ($count==1) { 
    echo "Success! $count"; 
} 
else { 
    echo "Unsuccessful! $count"; 
} 
} 
?> 

编辑:有可能会涉及到有关安全或坏的编码代码的问题,我是完全陌生的PHP索米的第一个目标是完成验证。

EDIT2:输出

Connected successfully string(5) "user0" string(5) "pass0" string(68) 
"SELECT * FROM `User` WHERE `username`='user0' and `password`='pass0'" 
bool(false) 

注意:试图让非对象的财产 /var/www/html/connect.php上线37 NULL失败!

+0

是您的密码存储为纯文本? –

+0

不,它在mysql数据库中。我猜测这是二进制格式。 – emre01

+0

可以添加var_dump结果 –

1:你不selecting database所以通过database name作为参数,如下图所示。

$conn = new mysqli($config['host'], $config['username'], $config['password'],'database_name'); 

第二:不要保存passwordplain text。使用PHP password_hash()

3:使用Prepared statement or PDO避免sql injection

+0

谢谢。下次我必须更加小心。不敢相信我忘了传递数据库名称。 – emre01

+0

很高兴帮助你:) @ emre01 – JYoThI

这意味着你得到了一个错误。

http://php.net/manual/en/mysqli.query.php

返回值¶

失败时返回FALSE。对于成功的SELECT,SHOW,DESCRIBE或 EXPLAIN查询,mysqli_query()将返回一个mysqli_result对象。对于 其他成功的查询mysqli_query()将返回TRUE。

+0

我知道这是一个错误。我想解释的是,我可以从MySQL数据库中看到用户名和密码。我的php文件中的查询字符串是真的。我看不出为什么他们不匹配。 – emre01