Reputation: 55
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
any idea why?
i already tried it multiple times and the problem is somewhere here:
INNER JOIN tv_genre ON itv.tv_genre_id = tv_genre.id
this is the php code:
$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);
} 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
is removed. im so confused.
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
which is working in phpmyadmin and not working in a php file :/
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) "" }
the only thing i can think of right now is that something goes wrong while converting the result to JSON
Upvotes: 1
Views: 333
Reputation: 55
SOLVED! the problem was that my mysql result contained some characters that were unable to convert to JSON use this function to fix it:
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;
}
Upvotes: 2