MySQL通过PHP:没有返回某些行,我无法弄清楚原因

时间:2012-04-01 20:30:35

标签: php mysql

这让我疯了。我有一个Items表(PK item_id)。每个项目属于一个类别,因此表格的一个字段是category_id。这是我用来调试它的简化SQL:

SELECT * FROM Items WHERE category_id = '?'

我正在替换?目前,手动将类别ID用于调试目的。表格中有5个项目,ID为1,2,3,4,5。现在这里是奇怪的地方。

  • 第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

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

2 个答案:

答案 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");