Warning: sqlsrv_query() expects parameter 1 to be resource, bool

Résolu
abirgl Messages postés 127 Date d'inscription   Statut Membre Dernière intervention   -  
 Utilisateur anonyme -
Bonjour ,
Je suis en train de développer une application php5 qui communique avec une base de données sql server 2012, j'ai voulais traiter cette requête :
$sql = "SELECT NIntervention, Reference, DateIntervention, CClient, Adresse, Cloture FROM GI_Intervention";
$stmt = sqlsrv_query($conn, $sql );
mais j'ai une erreur au niveau de la ligne : $stmt = sqlsrv_query($conn, $sql );
l'erreur est : sqlsrv_query() expects parameter 1 to be resource, boolean given in C:\wamp\www\...
Quelqu’un peut m'aider s'il vous plaît ?
PS: J'ai rajouté toutes les extensions nécessaire pour que php puisse se connecter avec sql server, j'ai modifié le fichier php.ini en rajoutant les dll adéquates et la connexion à la base est bien établie

3 réponses

tyranausor Messages postés 3545 Date d'inscription   Statut Membre Dernière intervention   2 039
 
Bonjour, je ne suis pas un expert en php mais si tu peux dire exactement ce que contiennent tes variables. De plus tu peux utiliser print_r() pour afficher ce que contient une variable, ça peut t'aider à voir où se situe l'erreur car visiblement à sqlsrv_query() tu donnes 2 paramètres et il faut une source alors que tu donnes un booléen!

Pour donner un peu plus d'allure à ton message, utilises les balises php ce qui coloriera ta syntaxe
0
abirgl Messages postés 127 Date d'inscription   Statut Membre Dernière intervention  
 
Bonjour Tyranausor,
la variable $conn c'est celle de la connexion à ma base sql server et ceci est bien établie, mon soucis c'est avec le traitement de la requete $sql, voici mon vode j'espère qu'il est lisible et que vous pourrez m'aider
<?php
//Connexion à la base de données
try {

$serverName = ".";

 $connectionOptions = array("Database"=>"mydatabase", "Uid"=>"sa", "PWD"=>"mypassword");

 $conn = sqlsrv_connect($serverName, $connectionOptions);

 echo"Connexion etablie";

}

catch (PDOException $error) {

die("Echec de connexion : " . $error->getMessage() );

}

// Affichage des colonnes de la table GI_Intervention dans un tableau

$sql = "SELECT NIntervention, Reference, DateIntervention, CClient, Adresse, Cloture FROM GI_Intervention";

$stmt = sqlsrv_query($conn, $sql );
//var_dump($stmt);
while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_NUMERIC) ) 
{
?>
	<tbody>
    	<tr>
        	<td><input type="checkbox" name="" /></td>
            <td><?php echo $row[0]."<br>"; ?></td>
			<td><?php echo date_format($row[2], 'Y-m-d')."<br>";?></td>
			<td> <?php echo $row[3]; ?> </td>
            <td><?php echo $row[4]."<br>"; ?></td>
            <td><?php echo $row[5]."<br> <br>"; ?></td>
         
        </tr>
		
	<?php
	}
    sqlsrv_free_stmt( $stmt);
	
    
?>
0
tyranausor Messages postés 3545 Date d'inscription   Statut Membre Dernière intervention   2 039
 
J'ai vu que tu as fais un
var_dump($stmp)
, ça te renvoie quoi?
0
abirgl Messages postés 127 Date d'inscription   Statut Membre Dernière intervention  
 
ça me retourne "false"
0
Utilisateur anonyme
 
Bonjour

Le message te dit que le paramètre 1 de sqlsrv_query est un booleen alors qu'il faudrait une ressource.
Le 1er paramètre, c'est $conn, donc $conn n'est pas une connexion.

Contrairement à ce que tu affirmes, ta connexion se passe mal. Sur quoi te bases-tu pour dire qu'elle est bonne ?
Si tu crois que ton try..catch te permet de détecter une erreur de connexion, je t'invite à relire dans le manuel de php la signification de cette instruction. Ton catch tel que tu l'as écrit capture les erreurs PDO, mais tu ne te connectes pas en PDO. Donc l'erreur générée lors de ta connexion n'est pas capturée.
Base-toi sur l'exemple donné pour ton type de connexion :
https://www.php.net/manual/fr/function.sqlsrv-connect.php

Et quand tu recopies des bouts de code trouvés à droite où à gauche, analyse-les pour comprendre comment ils marchent, et va voir dans la doc les fonctions et les instructions que tu ne connais pas. Si tu te contentes de recopier, tu ne feras jamais de progrès.

Au passage, je ne connais pas sql server, mais un serveur qui s'appelle "." je trouve ça bizarre.
0
abirgl Messages postés 127 Date d'inscription   Statut Membre Dernière intervention  
 
Bonjour " le père",
les paramètres sont correctes et le "." signifie que je travaille sur mon serveur local, concernant l'exemple que tu as posté, je l'ai déjà vu et je l'ai essayé.
Mon code fonctionne bien avec le code que j'ai posté, le problème c'était pas dans le code mais dans les fichiers dll. juste une remarque Mr " Je me contente pas de recopier des bouts de code trouvés à droite ou à gauche comme vous le dites" j'analyse et je comprends ce que je fais car que sais très bien comment je peux faire des progrès ;) quand à toi, je te donne un ptit conseil, la prochaine fois si tu as une réponse précise et qui peut vraiment aider à résoudre les problèmes posés ici vas-y sinon ne te jette pas partout juste pour marquer ta présence ;)
0
Utilisateur anonyme > abirgl Messages postés 127 Date d'inscription   Statut Membre Dernière intervention  
 
Faut pas te fâcher comme ça !
J'ai juste dit que ta connexion ne marchait pas, même si toi tu disais qu'elle marchait.
Je n'ai jamais dit qu'elle ne marchait pas à cause de ton code. Tu as trouvé que c'était à cause d'une dll manquante et tu as pu corriger, tant mieux.

Si tu avais utilisé le code exemple du lien que je t'ai donné, ça t'aurait donné un message d'erreur plus précis : ce n'était donc pas inutile.

Quant à mon conseil d'essayer de comprendre ce que tu recopies, je te l'ai donné en toute simplicité, dommage que tu le prennes si mal. Mais en voyant un
catch (PDOException $error)
sur une connexion qui n'est pas en PDO, n'importe quel helpeur de ce site sait qu'il a affaire à quelqu'un qui recopie du code sans le comprendre.
Cette erreur de programmation te cachait ton erreur de connexion. Corrige-la, sinon le jour où il y aura un autre problème de connexion, l'erreur sera encore cachée et tu continueras de dire que ta connexion est bonne.
0