通过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
表(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会返回所有其他项目
- 如果我将数据库中的第1项更改为类别ID为15、13、10或14,它仍然不会显示在PHP中的结果中
- 如果我将数据库中的项1更改为具有不同的类别ID,例如4,它仍然不会显示在结果中
- 如果我将任何其他项目更改为类别ID为17,则该项目将不再显示(该项目和项目1都不显示,即没有结果)
$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尝试了一些它不应该尝试的东西。