这让我疯了。我有一个Items
表(PK item_id
)。每个项目属于一个类别,因此表格的一个字段是category_id
。这是我用来调试它的简化SQL:
SELECT * FROM Items WHERE category_id = '?'
第1项的类别是17.在phpMyAdmin中,使用17作为参数的上述查询返回第1项.PHP没有。
PHP在使用其类别时返回所有其他项目:15,13,10和14.
如果我将数据库中的第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'];
}
以下是SHOW CREATE TABLE Items
:
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
注意:我没有创建数据库,所以请告诉我这是否有问题。
答案 0 :(得分:1)
闻起来像你的脚本和phpmyadmin没有使用相同的数据库。仔细检查您是否有生产/开发数据库。
仔细检查您是否正在运行您认为正在运行的脚本,将die('im here');
放在查询行之前。
答案 1 :(得分:1)
尝试
$query = mysql_query("SELECT * FROM Items i, Categories c WHERE i.category_id = '17' AND i.category_id = c.category_id");