将 SQL 查询定义为变量时出现意外的 E0F

Unexpected E0F When Defining an SQL Query as a Variable

我正在为一个小型论坛编写代码,并且在我将 SQL 查询设置为 PHP 变量的 PHP 代码中不断遇到 unexpected EOF 错误。我希望代码不会出现该错误,并在存储在 MySQL 数据库中的论坛应用程序中显示类别名称和描述。我尝试在互联网上的其他地方和 MySQL 和 PHP 手册中查找,但无济于事。

在我看来,语法是正确的,直到我开始在 category.php 的第 7 行的 mysqli_real_escape_string($connected, $_GET['id']) 中输入 $_GET['id'] 以及任何使用 POST 方法的内容在 create_cat.php。这很可能不仅仅是我的 IDE,因为当程序为 运行 时它会出现在我的错误日志中。我的代码如下所示。这只是整个文件的一小部分,但足以重现错误。

category.php:

        //do a query for the topics
        $sql = "SELECT  
                    topic_id,
                    topic_subject,
                    topic_date,
                    topic_cat
                FROM
                    topics
                WHERE
                    topic_cat = " . mysqli_real_escape_string($_GET['id']);

        $result = mysqli_query($sql);

论坛应用程序中还有更多文件,但我猜不会需要它们。

将函数调用放在字符串中是行不通的。需要在字符串外调用函数,然后拼接。

此外,您在函数调用后遗漏了 '

$sql = "SELECT cat_id, cat_name, cat_description FROM categories WHERE cat_id = '" . mysqli_real_escape_string($connected, $_GET['id']) . "'";

但是,你真的应该学会使用准备好的语句。

$sql = "SELECT cat_id, cat_name, cat_description FROM categories WHERE cat_id = ?";
$stmt = $connected->prepare($sql);
$stmt->bind_param("s", $_GET['id']);
$stmt->execute();
$result = $stmt->get_result();

如果您出于某种原因更喜欢过程语法:

$sql = "SELECT cat_id, cat_name, cat_description FROM categories WHERE cat_id = ?";
$stmt = mysqli_prepare($connected, $sql);
mysqli_stmt_bind_param($stmt, "s", $_GET['id']);
mysqli_stmt_execute($stmt);
$result = mysqli_stmt_get_result($stmt);