使用PHP访问MySQL DB行数据

时间:2013-03-25 05:15:10

标签: php mysql sql forum

我有以下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文件中有类似的代码,这使我相信这是我在数据库代码中犯的错误。

1 个答案:

答案 0 :(得分:1)

然而,要查看您返回的错误,但根据您的表格def的平均时间,cat_idint

但是你将它传递给单引号包围,这意味着如果它是一个字符串你不会在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

,则不太可能出现DBMS错误

理想情况下,您可以测试$_GET获取的值,并在传入之前正常处理不正确的类型,从而避免PHP或mySql生成错误。