我有以下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文件中有类似的代码,这使我相信这是我在数据库代码中犯的错误。
答案 0 :(得分:1)
然而,要查看您返回的错误,但根据您的表格def的平均时间,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生成错误。