从数据库返回时的PHP错误代码

时间:2016-05-08 21:12:27

标签: php mysql sql

$ip = $_SERVER['REMOTE_ADDR'];
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "images";
$id = $_SESSION['id'];
$ti = null;
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
$sql = "SELECT * FROM `denied` WHERE ip-adress ='".$ip."'";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
    echo "Sorry " . $row['Name'] . " you have been banned from this site";
}
else {
    echo "<form action='' method='POST'> Enter name to continue: <br/> <input type='text' name='name' placeholder='Enter Name'> <input type='submit' name='continue' value='Continue'> </form> ";
}

由于某种原因,它会返回错误:

  

注意:尝试在第218行的C:\ xampp \ htdocs \ Projects \ test \ test.php中获取非对象的属性

有问题的一行就是这一行:

$result = $conn->query($sql);

但我很肯定它与该行有关:

$sql = "SELECT * FROM `denied` WHERE ip-adress ='".$ip."'";'

2 个答案:

答案 0 :(得分:4)

这里的问题是WHERE子句中的列名:

WHERE ip-adress
        ^ hyphen (a.k.a. minus)

MySQL中的连字符具有特殊含义,它认为你想做一个减法。

即:ip 减去 address就是它的解释。

您需要将该列包装在刻度线中

WHERE `ip-adress`

全线:

$sql = "SELECT * FROM denied WHERE `ip-adress` ='".$ip."'";

检查查询http://php.net/manual/en/mysqli.error.php的错误会让你有所了解。

或者,或者将列重命名为下划线而不是连字符。

由于您正在使用会话,请确保会话已启动。

session_start();不在您发布的代码中。

error reporting添加到文件的顶部,这有助于查找错误。

<?php 
error_reporting(E_ALL);
ini_set('display_errors', 1);

// Then the rest of your code

旁注:只应在暂存时进行显示错误,而不是生产。

答案 1 :(得分:0)

错误消息实际上表示对象$conn不存在,您可以将其视为&#39;它未成功创建&#39;如果你愿意的话。

在任何情况下,您都可以通过尝试print_r($conn)

来查看对象是否看起来不错

也许你应该尝试这样连接:

$conn = mysqli_connect($servername, $username, $password, $dbname);

// Check connection
if (mysqli_connect_errno()) {
    echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

$sql = "SELECT * FROM `denied` WHERE ip-adress ='".$ip."'";
$result = $conn->query($sql);
...

我希望有所帮助!