简体   繁体   English

加入无法在php mysql中工作

[英]JOIN not working in php mysql

I am working on a project with PHP and MySQL. 我正在使用PHP和MySQL进行项目。 I am trying to run a SQL query where I need to fetch data from 5 tables. 我试图运行一个SQL查询,我需要从5个表中获取数据。 I'm getting an error on my query. 我的查询出现错误。

$value = json_decode(file_get_contents('php://input'));

$estId = $value->estId;

$sql = 'SELECT establishments.id, establishments.name, 
               establishments.stay_value, establishments.latitude, 
               establishments.longitude, establishments.description,
               establishments.address,
               facilities.id, facilities.name,
               accomodations.id,accomodations.name
        FROM establishments
        INNER JOIN (establishments_facilities
                    INNER JOIN facilities
                    ON establishments_facilty.facility_id = facilities.id) 
        ON establishments.id = establishments_facility.id
        INNER JOIN (establishments_accommodations
                    INNER JOIN accommodations
                    ON establishments_accommodations.accommodation_d = accomodations.id)      
        WHERE establishments.id ="'.$estId .'" ';

$result = $conn->query($sql);
if($result->num_rows>0){
    while($row = $result->fetch_assoc()){
        $json_obj = $row;
    }
    $json_obj['success'] = true;
    echo json_encode($json_obj);
}

My 5 tables are: 我的5张桌子是:

establishments 场所

1   id    
2   user_id    
3   name    
4   logo    
5   description    
6   email    
7   latitude    
8   longitude    
9   stay_value

accomodations 的住宿

1   id    
2   name

facilities 设备

1   id    
2   name

establishments_accommodations establishments_accommodations

1   id    
2   establishment_id    
3   accommodation_id

establishments_facilities establishments_facilities

1   id    
2   establishment_id    
3   facility_id

Any help will be appreciated. 任何帮助将不胜感激。

The query you wrote is hard to read and you should use alias for better readability and also join syntax does not look correct, here is the query with proper alias 您编写的查询很难阅读,您应该使用别名以提高可读性,并且联接语法看起来不正确,这是带有适当别名的查询

SELECT 
e.id, 
e.name, 
e.stay_value, 
e.latitude, 
e.longitude, 
e.description,
e.address,
f.id, 
f.name,
a.id,
a.name
FROM establishments e 
INNER JOIN establishments_facilities ef on e.id = ef.id
INNER JOIN facilities f ON ef.facility_id = f.id          
INNER JOIN establishments_accommodations ea on ea.establishment_id = ef.establishment_id
INNER JOIN accommodations a ON ea.accommodation_d = a.id      
WHERE e.id ={some value}

Now in PHP you may have something as 现在在PHP中,您可能会

$sql = "
SELECT 
e.id, 
e.name, 
e.stay_value, 
e.latitude, 
e.longitude, 
e.description,
e.address,
f.id, 
f.name,
a.id,
a.name
FROM establishments e 
INNER JOIN establishments_facilities ef on e.id = ef.id
INNER JOIN facilities f ON ef.facility_id = f.id          
INNER JOIN establishments_accommodations ea on ea.establishment_id = ef.establishment_id
INNER JOIN accommodations a ON ea.accommodation_d = a.id      
where e.id = '".$estId."'";

Note that where e.id = '".$estId."'" is vulnerable to sq-injection, so better to use prepared statement. 请注意, where e.id = '".$estId."'"容易受到sq注入的影响,因此最好使用预处理语句。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM