J'ai une requête qui renvoie toutes les données lors de l'exécution sur MSSQL, mais lorsque j'essaie d'obtenir le résultat avec du code php, elle renvoie null
SELECT:
$sql = sqlsrv_query($conn, $query);
while($item = sqlsrv_fetch_array($sql)){
var_dump($item);
}
CODE PHP:
$query = "SELECT DISTINCT (E080SER.desser) as desser,
E080SER.CODFAM codfam, e085cli.apecli apecli,
E085CLI.CODCLI codcli, E085CLI.NOMCLI nomeCli
FROM
E160CTR,
E160CVS, e080ser,
E085CLI,
E070EMP,
E070FIL
WHERE
e070emp.nomemp like '%Gestão tech%' and
e080ser.codser = e160cvs.codser and
e080ser.codser like ('%manw%') and (E160CTR.CODEMP = 1) and
((E160CTR.CODEMP = E070FIL.CODEMP) AND (E160CTR.CODFIL =
E070FIL.CODFIL) AND
(E160CTR.CODCLI = E085CLI.CODCLI) AND (E160CVS.CODEMP =
E160CTR.CODEMP) AND
(E160CVS.CODFIL = E160CTR.CODFIL) AND (E160CVS.NUMCTR =
E160CTR.NUMCTR)) AND
(E160CTR.SITCTR = 'A') and e080ser.sitser = 'a' and
E080SER.CODEMP IN (1, 9)
order by e080ser.desser";
3 Réponses :
Il y a un point-virgule supplémentaire après la boucle while, c'est-à-dire que le corps de la boucle est vide. Ensuite, le résultat que vous essayez de lire est après la dernière ligne, c'est pourquoi vous n'obtenez pas ce que vous attendiez.
Merci, Andrey, mais en fait, c'était une petite erreur à cause des tests que je faisais. Même sans le point-virgule, il renvoie null
Parfois, il est nécessaire de récupérer tous les ensembles de résultats avec sqlsrv_next_result () pour obtenir vos données. Vous pouvez essayer avec ceci:
<?php
...
$sql = sqlsrv_query($conn, $query);
do {
while($item = sqlsrv_fetch_array($sql)){
var_dump($item);
}
} while (sqlsrv_next_result($sql));
...
?>
Pourriez-vous s'il vous plaît expliquer ce que signifie «parfois». Je vois des données lors de l'utilisation de votre code - tandis que var_dump ($ sql) renvoie null.
@Gerfried, quand sqlsrv_query () exécute une instruction complexe, par exemple INSERT ...; SELECT ...; , le nombre de lignes affectées sera renvoyé sous la forme d'un ensemble de résultats distinct. Donc, dans ce cas, sqlsrv_next_result () rend le résultat suivant actif. Une autre option consiste à utiliser SET NOCOUNT ON;
J'ai trouvé le problème
Le problème était l'encodage, j'ai mis la requête $ à l'intérieur de utf8_encode (), et maintenant il renvoie les résultats.
Merci à tous pour votre temps.
Qu'entendez-vous par ... le résultat dans le code php, il renvoie nul - que
$ itemestnulpour toutes les lignes? Et vous devez vérifier$ sqlaprès$ sql = sqlsrv_query ($ conn, $ query);.Oui, il est nul pour toutes les lignes. Je ne sais pas, je pense que c'est quelque chose avec le SELECT, car lorsque j'essaye cette routine avec une autre requête, elle fonctionne correctement
OK, alors pouvez-vous placer
print_r (sqlsrv_errors (), true));après$ sql = sqlsrv_query ($ conn, $ query);appel pour vérifier les erreurs? Etif ($ sql === false) {...}est une vérification d'erreur réelle.J'ai essayé ça et je ne renvoie rien
Etrange, votre code semble correct (sauf la vérification des erreurs). Êtes-vous sûr d'exécuter cette instruction sur la base de données correcte (je suppose que
sqlsrv_query ()renvoie de nombreuses lignes vides)?Oui Zhorov, c'est correct, exécuter un autre select sur la même base de données renvoie le résultat, mais celui-ci ne renvoie rien. Je ne sais vraiment pas quel est le problème. J'ai vérifié avec des gars ici sur mon travail et personne n'est capable de trouver ce qui se passe. Obs: l'exécuter directement sur la base de données renvoie beaucoup de lignes (97 pour être exact)