通过PHP的MySQL:不返回某些行,我不知道为什么

通过PHP的MySQL:不返回某些行,我不知道为什么,php,mysql,Php,Mysql,这快把我逼疯了。我有一个Items表(PKitem\u id)。每个项目都属于一个类别,因此表中的一个字段是category\u id。以下是我用来调试此操作的简化SQL: 从类别_id='?'的项目中选择* 我要替换?为了调试的目的,暂时手动使用类别ID。表中有5项id为1、2、3、4、5。现在这里是它变得奇怪的地方 项目1的类别为17。在phpMyAdmin中,使用17作为参数的上述查询将返回项1。PHP没有 当使用类别15、13、10和14时,PHP会返回所有其他项目 如果我将数据库中的

这快把我逼疯了。我有一个
Items
表(PK
item\u id
)。每个项目都属于一个类别,因此表中的一个字段是
category\u id
。以下是我用来调试此操作的简化SQL:

从类别_id='?'的项目中选择*

我要替换?为了调试的目的,暂时手动使用类别ID。表中有5项id为1、2、3、4、5。现在这里是它变得奇怪的地方

  • 项目1的类别为17。在phpMyAdmin中,使用17作为参数的上述查询将返回项1。PHP没有

  • 当使用类别15、13、10和14时,PHP会返回所有其他项目

  • 如果我将数据库中的第1项更改为类别ID为15、13、10或14,它仍然不会显示在PHP中的结果中

  • 如果我将数据库中的项1更改为具有不同的类别ID,例如4,它仍然不会显示在结果中

  • 如果我将任何其他项目更改为类别ID为17,则该项目将不再显示(该项目和项目1都不显示,即没有结果)

这是怎么回事?无论发生什么情况,项目1和仅项目1都不会显示,如果给定类别为17,则其他类别将不会显示,否则会显示?它可以在phpMyAdmin中工作,但不能在PHP中工作

以下是测试此功能的PHP代码:

$query = mysql_query("SELECT * FROM `Items` WHERE `category_id` = '17'");

while ($r = mysql_fetch_assoc($query))
{
    echo $r['item_id'];
}
下面是
显示创建表项

 CREATE TABLE `Items` (
 `item_id` int(11) NOT NULL default '0',
 `description` varchar(250) default NULL,
 `name` varchar(25) default NULL,
 `category_id` int(11) default NULL,
 PRIMARY KEY  (`item_id`),
 UNIQUE KEY `item_id` (`item_id`),
 KEY `FK_Items_Categories` (`category_id`),
 CONSTRAINT `FK_Items_Categories` FOREIGN KEY (`category_id`) REFERENCES `Categories` (`category_id`),
) ENGINE=InnoDB DEFAULT CHARSET=latin1
和类别:

 CREATE TABLE `Categories` (
 `category_id` int(11) NOT NULL auto_increment,
 `parent_id` int(11) default NULL,
 `name` varchar(25) default NULL,
 PRIMARY KEY  (`category_id`),
 KEY `FK_Categories_Categories` (`parent_id`),
 CONSTRAINT `FK_Categories_Categories` FOREIGN KEY (`parent_id`) REFERENCES `Categories` (`category_id`)
) ENGINE=InnoDB AUTO_INCREMENT=18 DEFAULT CHARSET=latin1

注意:我没有创建数据库,因此请告诉我这是否有问题。

闻起来您的脚本和phpmyadmin没有使用相同的数据库。仔细检查是否有生产/开发数据库

再次检查你正在运行你认为正在运行的脚本,把
die('im here')在查询行之前。

尝试

$query = mysql_query("SELECT * FROM Items i, Categories c WHERE i.category_id = '17' AND i.category_id = c.category_id");

您是否尝试过在不引用类别id值的情况下进行查询<代码>`category\u id`=17
是的,我试过了。同样的结果。你能发布你的数据库结构的更多细节吗?没有WHERE子句会发生什么?还请给出
SHOW CREATE TABLE Items
的结果。由于没有WHERE子句,它会回显每个项目“12345”。它们使用的是相同的数据库!之前,请执行
die
测试。在while块之后立即使用die结束脚本执行,以避免在开始时看到错误的结果。使用
var\u dump($r)
而不是
echo
。这真的像是一个愚蠢的问题。这不仅仅是一个问题,抱歉:/好的想法,但这仍然不起作用。。。PHP仍然相信,
category\u id
正在引用Categories表的
parent\u id
。这和钥匙有关吗?创建表时,
外键(category\u id)引用了category(category\u id)
…执行
显示创建表类别
完成。在MySQL中定义外键时,是否引用引用表的
?这似乎就是正在发生的事情…使用
信息\u模式;从键列用法中选择表名、列名、约束名、引用表名、引用列名,其中引用表名='Categories'
MyISAM不支持外键约束,所以我不会打赌。也许phpMyAdmin尝试了一些它不应该尝试的东西。