【发布时间】:2018-01-02 14:16:45
【问题描述】:
所以我得到了这个在 mysql phpmyadmin 中完全可以工作的查询,但是当我在 php 文件中使用它时它不工作。
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
知道为什么吗?
我已经尝试过很多次了,问题出在这里:
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 行)但它没有输出。
它实际上在以下情况下工作:
INNER JOIN tv_genre ON itv.tv_genre_id = tv_genre.id
被删除。我很困惑。
更新: 我检查了 phpmyadmin 中的行,并注意到多行具有相同的名称“ID”,并认为它可能会在转换为 JSON 时产生冲突,所以我进行了一个新查询:
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 文件中工作:/
var_dump 结果(出于显而易见的原因更改了 channel_source):
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 时出现问题
【问题讨论】:
-
如果它在 PHP 中不起作用,那么最好显示 PHP 代码。
-
这是什么不工作?你有错误吗?
-
@LornaMitchell 空白页,php 中没有错误。在 mysql 中,我得到了我想要的结果。在php中我只是没有结果。但查询正在执行。每当我删除“问题位”时,它实际上都会返回数据
-
这里有一个有用的提示:永远不要使用邪恶
SELECT * -
@JorgeCampos 谢谢!我解决了!有一个带有此字符的名称:“Ö”,无法转换为 JSON。我使用我将添加到主帖的功能修复了它!非常感谢。