从数据库返回时 php 错误代码


Php error code when returning from database

$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."'";'

这里的问题是 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();不在你发布的代码中。

将错误报告添加到文件顶部,这将有助于查找错误

<?php 
error_reporting(E_ALL);
ini_set('display_errors', 1);
// Then the rest of your code

旁注:显示错误只能在暂存中完成,而不应在生产中完成。

错误消息实际上说对象$conn不存在,如果您愿意,可以将其读作"未成功创建"。

在任何情况下,您都可以通过尝试以下方法查看对象是否看起来不错: 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);
...

我希望这有所帮助!