0
votes

SQL-Server Select renvoyant null sur PHP

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";


6 commentaires

Qu'entendez-vous par ... le résultat dans le code php, il renvoie nul - que $ item est nul pour toutes les lignes? Et vous devez vérifier $ sql aprè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? Et if ($ 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)


3 Réponses :


1
votes

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.


1 commentaires

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



2
votes

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));
...

?>


2 commentaires

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;



0
votes

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.


0 commentaires