0

我有以下 PHP 来访问我正在构建的简单论坛的数据库:

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

//If data is unable to be served...
if (!$result) { 
    echo 'Category could not be displayed! Please try again later' . mysql_error();
} else {
    if(mysql_num_rows($result) == 0) {
        //This is the error code being displayed
        echo 'Category does not exist!';
    }
}

这是数据库这一部分的代码:

CREATE TABLE categories(
    cat_id          INT(8) NOT NULL AUTO_INCREMENT,
    cat_name        VARCHAR(255) NOT NULL,
    cat_description VARCHAR(255) NOT NULL,
    UNIQUE INDEX
    cat_name_unique (cat_name),
    PRIMARY KEY(cat_id)
)
TYPE=INNODB;

问题:由于某种原因,查询似乎没有正确地从数据库中提取行数据,我不知道为什么它不工作。也就是说,我对 MySQL 和 SQL 也很陌生。有人对发生的事情有任何想法吗?简单地说,为什么 MySQL 查询没有访问 PHP 代码的数据?

任何帮助都感激不尽!

谢谢!

更新:

将 SQL 查询更改为:

categories.cat_id = " . mysql_real_escape_string($_GET['id']);

解决了原来的问题,结果又出现了另一个问题。

我现在收到错误代码:

echo 'Category could not be displayed! Please try again later' . mysql_error();

使用 SQL 输出:

You have an error in your SQL syntax; check the manual that corresponds to
your MySQL server version for the right syntax to use near '' at line 8

我之前实际上遇到过这个问题,但是在我尝试修复它时,我发现了我发布的原始代码。我在我的 PHP 文件中都有类似的代码有效,这让我相信这是我在数据库代码中犯的错误。

4

1 回答 1

1

然而,看看你返回了什么错误,但同时根据你的表定义,cat_id是一个int.

但是你用单引号括起来传递它,这意味着如果它是一个字符串,你不会在 PHP 中得到错误,你会从 mySQL 中得到它。

好的做法是改变这一点

categories.cat_id = '" . mysql_real_escape_string($_GET['id']) . "'";

categories.cat_id = " . intval( mysql_real_escape_string($_GET['id']) );

如果$_GET['id']返回一个字符串,或者如果 DBMS 设置为strict_mode

理想情况下,您可以测试取自 的值$_GET,并在传入错误类型之前优雅地处理它们,从而避免 PHP 或 mySql 产生错误。

于 2013-03-25T05:21:33.513 回答