Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PHP脚本中,MySQL查询返回空列_Php_Mysql_Null - Fatal编程技术网

在PHP脚本中,MySQL查询返回空列

在PHP脚本中,MySQL查询返回空列,php,mysql,null,Php,Mysql,Null,我有一个sql查询: SELECT * FROM products p, products_description pd, products_to_categories c left join products_sex ps on (c.products_id = ps.products_id), categories cc WHERE p.products_id = pd.products_id and p.products_id = c.produ

我有一个sql查询:

SELECT * 
FROM products p, products_description pd, products_to_categories c left 
     join  products_sex ps on (c.products_id = ps.products_id), 
     categories cc 
WHERE p.products_id = pd.products_id 
      and p.products_id = c.products_id 
      and cc.categories_id = c.categories_id 
      and p.products_status = 1 
      and p.products_price >= 15.8333333333 
      and p.products_price <= 40 
      and p.products_quantity > 0 
      and (ps.products_sex = "U" or ps.products_sex is null) 
      and (c.categories_id = 77 or cc.parent_id = 77) 
ORDER BY products_sort_order, p.products_date_added desc, pd.products_name ASC 
LIMIT 0, 40
但是,如果我通过PHP脚本(使用mysql\u query和mysql\u fetch\u assoc)获得产品,我会得到:


为什么我会得到产品id为NULL?

这可能是因为您正在连接包含同名列的多个表,这里是
products\u id
,因此您可以检索具有此名称的最后一列的值,该列可能为
NULL

您应该为要检索的列放置别名:

SELECT p.products_id AS pPropId, p.* FROM products p, ...
然后,在PHP结果中,您可以访问以下列:

$result['pPropId']
有关SQL别名功能的详细信息

编辑:为什么它在命令行中工作而不是在这里

SQL查询工作正常,将返回名称
products\u id
的每一列。问题是您使用了基于结果返回关联数组的
mysql\u fetch\u assoc()
。数组中同一个键不能有多个值

因此,它可能在内部执行的操作是设置
$result['products\u id']=p.products\u id
,但随后它会对具有相同名称的下一列执行相同的操作,以擦除之前的值。您可以使用没有此问题的


一个好的做法是在SELECT中列出您真正想要检索的列,而不仅仅是
SELECT*
。然后,两个同名的列需要不同的别名就合乎逻辑了。

谢谢,就是这样。但是我不明白,为什么它在mysql命令行中工作而在PHP中不工作。@yetty>,因为SQL查询工作得很好。检查我的最新答案
SELECT p.products_id AS pPropId, p.* FROM products p, ...
$result['pPropId']