多个内部联接在php中不起作用 [英] multiple inner join not working in php

查看:95
本文介绍了多个内部联接在php中不起作用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

所以我得到了在mysql phpmyadmin中完全可以使用的查询,但是当我在php文件中使用它时却无法使用.

so i got this query that is fully working in mysql phpmyadmin but its not working when i use it in a php file.

SELECT * 
  FROM services_package 
  JOIN service_in_package 
    ON services_package.id = service_in_package.package_id 
  JOIN itv 
    ON service_in_package.service_id = itv.id 
  JOIN tv_genre 
    ON itv.tv_genre_id = tv_genre.id  
 WHERE services_package.id  = 25

知道为什么吗?

我已经尝试过多次了,问题出在这里:

i already tried it multiple times and the problem is somewhere here:

INNER JOIN tv_genre ON itv.tv_genre_id = tv_genre.id

这是php代码:

    $sql = "
    SELECT * 
      FROM services_package 
      JOIN service_in_package 
        ON services_package.id = service_in_package.package_id 
      JOIN itv 
        ON service_in_package.service_id = itv.id 
      JOIN tv_genre 
        ON itv.tv_genre_id = tv_genre.id 
     WHERE services_package.id = 25
    "; 

$rows = array();

$result = $conn->query($sql);

if($result->num_rows > 0)
{
     while($r = mysqli_fetch_assoc($result)) {
    $rows[] = $r;

    }

echo json_encode($rows);

} 好的,所以我没有任何错误.即使打开了错误.循环循环了8次(这是正确的原因,因为它应该返回8行),但是没有输出.

} okay, so i get no errors. even with errors turned on. the loop is looping 8 times (which is correct cause it should return 8 rows) but it has no output.

它实际上在以下时间起作用:

it actually is working when :

 INNER JOIN tv_genre ON itv.tv_genre_id = tv_genre.id

已删除.我很困惑.

更新: 我检查了phpmyadmin中的行,并发现多行具有相同的名称"ID",并认为这可能会在向JSON的转换中产生冲突,因此我进行了新查询:

UPDATE: i checked the rows in phpmyadmin and noticed that multiple rows had the same name 'ID' and thought it could create a conflict in the conversion to JSON so i made a new query:

        SELECT itv.id AS channel_id, 
tv_genre.id AS genre_id, 
services_package.id AS service_package_id, 
itv.name AS channel_name, 
itv.descr AS channel_description, 
services_package.type AS channel_type, 
itv.number, itv.censored, 
itv.cmd AS channel_source, 
tv_genre.title AS genre_name, 
itv.logo
FROM services_package
JOIN service_in_package ON services_package.id = service_in_package.package_id
JOIN itv ON service_in_package.service_id = itv.id
JOIN tv_genre ON itv.tv_genre_id = tv_genre.id
WHERE services_package.id =25

正在phpmyadmin中工作,而不在php文件中工作:/

which is working in phpmyadmin and not working in a php file :/

var_dump结果(出于明显原因更改了channel_source):

var_dump result(changed the channel_source for obvious reasons):

array(11) { ["channel_id"]=> string(3) "846" ["genre_id"]=> string(2) "10" ["service_package_id"]=> string(2) "25" ["channel_name"]=> string(8) "HAC 2 HD" ["channel_description"]=> string(0) "" ["channel_type"]=> string(2) "tv" ["number"]=> string(1) "5" ["censored"]=> string(1) "0" ["channel_source"]=> string(45) "http://test.com" ["genre_name"]=> string(8) "Englisch" ["logo"]=> string(0) "" } array(11) { ["channel_id"]=> string(3) "845" ["genre_id"]=> string(2) "10" ["service_package_id"]=> string(2) "25" ["channel_name"]=> string(8) "HAC 1 HD" ["channel_description"]=> string(0) "" ["channel_type"]=> string(2) "tv" ["number"]=> string(1) "4" ["censored"]=> string(1) "0" ["channel_source"]=> string(44) "http://test.com" ["genre_name"]=> string(8) "Englisch" ["logo"]=> string(0) "" } array(11) { ["channel_id"]=> string(3) "831" ["genre_id"]=> string(2) "10" ["service_package_id"]=> string(2) "25" ["channel_name"]=> string(9) "HAC 3 HD " ["channel_description"]=> string(0) "" ["channel_type"]=> string(2) "tv" ["number"]=> string(1) "6" ["censored"]=> string(1) "0" ["channel_source"]=> string(45) "http://test.com" ["genre_name"]=> string(8) "Englisch" ["logo"]=> string(0) "" } array(11) { ["channel_id"]=> string(3) "829" ["genre_id"]=> string(2) "10" ["service_package_id"]=> string(2) "25" ["channel_name"]=> string(8) "HAC SD 3" ["channel_description"]=> string(0) "" ["channel_type"]=> string(2) "tv" ["number"]=> string(1) "3" ["censored"]=> string(1) "0" ["channel_source"]=> string(39) "http://test.com" ["genre_name"]=> string(8) "Englisch" ["logo"]=> string(0) "" } array(11) { ["channel_id"]=> string(3) "828" ["genre_id"]=> string(2) "10" ["service_package_id"]=> string(2) "25" ["channel_name"]=> string(8) "HAC SD 2" ["channel_description"]=> string(0) "" ["channel_type"]=> string(2) "tv" ["number"]=> string(1) "2" ["censored"]=> string(1) "0" ["channel_source"]=> string(39) "http://test.com" ["genre_name"]=> string(8) "Englisch" ["logo"]=> string(0) "" } array(11) { ["channel_id"]=> string(3) "814" ["genre_id"]=> string(2) "10" ["service_package_id"]=> string(2) "25" ["channel_name"]=> string(13) "Go To Luxe.TV" ["channel_description"]=> string(0) "" ["channel_type"]=> string(2) "tv" ["number"]=> string(2) "23" ["censored"]=> string(1) "0" ["channel_source"]=> string(41) "http://test.com" ["genre_name"]=> string(8) "Englisch" ["logo"]=> string(0) "" } array(11) { ["channel_id"]=> string(3) "808" ["genre_id"]=> string(1) "8" ["service_package_id"]=> string(2) "25" ["channel_name"]=> string(16) "Nature & Animaux" ["channel_description"]=> string(0) "" ["channel_type"]=> string(2) "tv" ["number"]=> string(2) "10" ["censored"]=> string(1) "0" ["channel_source"]=> string(36) "http://test.com" ["genre_name"]=> string(11) "Französisch" ["logo"]=> string(0) "" } array(11) { ["channel_id"]=> string(3) "807" ["genre_id"]=> string(1) "8" ["service_package_id"]=> string(2) "25" ["channel_name"]=> string(8) "HAC SD 1" ["channel_description"]=> string(0) "" ["channel_type"]=> string(2) "tv" ["number"]=> string(1) "1" ["censored"]=> string(1) "0" ["channel_source"]=> string(39) "http://test.com" ["genre_name"]=> string(11) "Französisch" ["logo"]=> string(0) "" }

我现在唯一能想到的就是在将结果转换为JSON时出了点问题

the only thing i can think of right now is that something goes wrong while converting the result to JSON

推荐答案

已解决!问题是我的mysql结果包含一些无法转换为JSON的字符,请使用此函数对其进行修复:

function utf8ize($mixed) {
    if (is_array($mixed)) {
        foreach ($mixed as $key => $value) {
            $mixed[$key] = utf8ize($value);
        }
    } else if (is_string ($mixed)) {
        return utf8_encode($mixed);
    }
    return $mixed;
}

这篇关于多个内部联接在php中不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆