PHP MySQL的覆瓦状排列的SELECT语句返回null
胡阿里·Zegai:
我试图执行查询,但结果却是零,我执行在phpMyAdmin相同的查询并返回结果。
问题是,当查询包含SELECT内的另一个SELECT语句(覆瓦状),所以当查询只包含一个SELECT语句,它工作正常,并返回结果。下面是代码:
db_config.php
<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "university_db";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
get_planning.php
<?php
require 'db_config.php';
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$sql = "SELECT cours.jour,
TIME_FORMAT(cours.heure_debut, '%H:%i') AS debut,
TIME_FORMAT(cours.heure_fin, '%H:%i') AS fin,
enseignant.nom_ens as prof, modules.nom_mod as module, salles.nom_salle as salle
FROM cours, promotion, enseignant, modules, salles
WHERE cours.id_promo = (SELECT id_promo FROM promotion WHERE promotion.niveau = '2'
AND promotion.id_speci = (SELECT id_speci FROM spécialité WHERE nom_speci = 'MGL'))
AND cours.id_promo = promotion.id_promo AND cours.id_ens = enseignant.id_ens AND cours.id_salle = salles.id_salle AND cours.id_mod = modules.id_mod
ORDER BY cours.id_cours;";
$result = $conn->query($sql);
if($result == null)
echo "Result is empty!";
输出:
Result is empty!
信息:
- PHP:7.3.5版本
- 数据库:MySQL的
O.琼斯:
为解决此问题的三点建议:
更改您
cours.id_promo = (SELECT ...
要cours.id_promo IN (SELECT...
和之后做同样的线路。为什么?如果您使用=
与内SELECT语句返回多个结果,热潮。查询失败。SQL是,在它的心脏,一组处理语言,并this IN that
检查这this
是一组中的一员that
。您呼应
$sql
值,以确保本声明它是正确的。尝试通过phpMyAdmin的运行确切的语句,以确保它给你你所期望的。你有这样的
if($result == null)
echo "Result is empty!";
将其更改为这
if(!$result)
echo 'sql failure:', $conn->error, ': ', $sql;
该query()
方法只返回一个falsey如果查询失败的结果。如果它成功,但发现没有匹配行,query()
返回一个空的结果集。所以,任何时候你的$结果是falsey,您在查询中所做的一个编程错误。在echo
我提到的诊断会为你。
临提示请务必检查SQL操作错误。
临提示2。带上你的SQL技能带入21世纪。使用明确的联接操作,而不是带点儿怀旧逗号连接操作。更改...
SELECT cours.jour, whatever, whatever
FROM cours
JOIN promotion ON cours.id_promo = promotion.id_promo
JOIN enseignant ON cours.id_ens = enseignant.id_en
JOIN modules ON cours.id_mod = modules.id_mod
JOIN salles ON cours.id_salle = salles.id_salle
WHERE cours.id_promo IN (SELECT id_promo FROM promotion WHERE promotion.niveau = '2')
AND promotion.id_speci IN (SELECT id_speci FROM spécialité WHERE nom_speci = 'MGL')
ORDER BY cours.id_cours
你的表之间的关系更容易阅读和理解这种方式。而且,您可以更改JOIN
到LEFT JOIN
,如果你的应用需要。