Projet Entreprise PDO PHP procédure stockée
Fermé
Mickael_87
Messages postés
11
Date d'inscription
jeudi 26 septembre 2019
Statut
Membre
Dernière intervention
27 septembre 2019
-
Modifié le 26 sept. 2019 à 13:51
Mickael_87 Messages postés 11 Date d'inscription jeudi 26 septembre 2019 Statut Membre Dernière intervention 27 septembre 2019 - 27 sept. 2019 à 15:43
Mickael_87 Messages postés 11 Date d'inscription jeudi 26 septembre 2019 Statut Membre Dernière intervention 27 septembre 2019 - 27 sept. 2019 à 15:43
A voir également:
- Projet Entreprise PDO PHP procédure stockée
- Clé windows 10 entreprise gratuit - Guide
- Organigramme entreprise word - Guide
- Easy php - Télécharger - Divers Web & Internet
- Planning entreprise - Télécharger - Outils professionnels
- Entreprise architecte - Télécharger - Gestion de projets
6 réponses
jordane45
Messages postés
38401
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
31 janvier 2025
4 732
26 sept. 2019 à 13:55
26 sept. 2019 à 13:55
Bonjour,
Déjà, non ce n'est pas vraiment du PDO (mais c'est assez proche )
Ensuite, ton erreur arrive sur quelle ligne ? quelle requête ?
Que t'affiche exactement ton
As tu testé la requête directement dans la bdd ?
As tu testé l'appel à tes procédures stockées directement dans la bdd ?
Car il semble que le souci provienne des requêtes/procédures elles mêmes ... et que ça ne soitpas un souci de code php...
NB: Pour poster ton code sur le forum, tu dois utiliser les balises de code.
https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
Déjà, non ce n'est pas vraiment du PDO (mais c'est assez proche )
Ensuite, ton erreur arrive sur quelle ligne ? quelle requête ?
Que t'affiche exactement ton
var_dump($article);?
As tu testé la requête directement dans la bdd ?
As tu testé l'appel à tes procédures stockées directement dans la bdd ?
Car il semble que le souci provienne des requêtes/procédures elles mêmes ... et que ça ne soitpas un souci de code php...
NB: Pour poster ton code sur le forum, tu dois utiliser les balises de code.
https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
jordane45
Messages postés
38401
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
31 janvier 2025
4 732
27 sept. 2019 à 10:11
27 sept. 2019 à 10:11
Y'a un truc qui me parait étrange....
Tu passes DEUX variables dans tes params .... variables que tu n'utilises pas dans tes requêtes de toutes façons...
Je pense que tu n'as pas regardé la doc...
https://www.php.net/manual/fr/function.sqlsrv-query.php
Tu passes DEUX variables dans tes params .... variables que tu n'utilises pas dans tes requêtes de toutes façons...
Je pense que tu n'as pas regardé la doc...
https://www.php.net/manual/fr/function.sqlsrv-query.php
Mickael_87
Messages postés
11
Date d'inscription
jeudi 26 septembre 2019
Statut
Membre
Dernière intervention
27 septembre 2019
27 sept. 2019 à 10:45
27 sept. 2019 à 10:45
Je vais expliqué mon résonnement (me dire s'il est faux) :
La requête de base que l'on m'a donné est :
declare @art as numeric
set @art = (select idarticle from art_gtin where gtin = @input)
exec ps_cadenciermultisites @artnoid = @art
Le @input c'est ma variable $article (en php) où je récup avec un POST ce que tape au clavier l'utilisateur.
Dans la première stmt (donc stmt1) je mets params2 parce que $article (le @input) est utilisé pour SET le @art.
Et dans la deuxième stmt (donc stmt2) je mets params et params2 car :
- on a besoin de @art (qui est en fonction de $article)
- on a besoin de @artnoid (qui est fonction de $article car @artnoid = $art dans ma requête)
Après je me trompe très certainement (vu que mon code marche pas ;-p)
La requête de base que l'on m'a donné est :
declare @art as numeric
set @art = (select idarticle from art_gtin where gtin = @input)
exec ps_cadenciermultisites @artnoid = @art
Le @input c'est ma variable $article (en php) où je récup avec un POST ce que tape au clavier l'utilisateur.
Dans la première stmt (donc stmt1) je mets params2 parce que $article (le @input) est utilisé pour SET le @art.
Et dans la deuxième stmt (donc stmt2) je mets params et params2 car :
- on a besoin de @art (qui est en fonction de $article)
- on a besoin de @artnoid (qui est fonction de $article car @artnoid = $art dans ma requête)
Après je me trompe très certainement (vu que mon code marche pas ;-p)
jordane45
Messages postés
38401
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
31 janvier 2025
4 732
Modifié le 27 sept. 2019 à 11:40
Modifié le 27 sept. 2019 à 11:40
Je vais te donner mon raisonnement....
Etape 1 ... lire et comprendre la documentation et les exemples donnés ici : https://www.php.net/manual/fr/function.sqlsrv-query.php
Etape 2 ... appliquer ce qui indiqué dans le lien...
Etape 3 Si ça ne fonctionne toujours pas.... recommencer à l'étape 1
L'utilisation du SET dans la requête n'a aucun intérêt...
Autant, directement, faire appel à ta requête
puis utiliser son résultat pour l'envoyer dans ta seconde requête....
NB: Pour lire le résultat d'une requête, tu dois en faire un fetch
par exemple :
https://www.php.net/manual/fr/function.mssql-fetch-row.php
Etape 1 ... lire et comprendre la documentation et les exemples donnés ici : https://www.php.net/manual/fr/function.sqlsrv-query.php
Etape 2 ... appliquer ce qui indiqué dans le lien...
Etape 3 Si ça ne fonctionne toujours pas.... recommencer à l'étape 1
:-)
En ce qui concerne ton code....L'utilisation du SET dans la requête n'a aucun intérêt...
Autant, directement, faire appel à ta requête
select idarticle from art_gtin where gtin = ".$article
puis utiliser son résultat pour l'envoyer dans ta seconde requête....
NB: Pour lire le résultat d'une requête, tu dois en faire un fetch
par exemple :
https://www.php.net/manual/fr/function.mssql-fetch-row.php
Mickael_87
Messages postés
11
Date d'inscription
jeudi 26 septembre 2019
Statut
Membre
Dernière intervention
27 septembre 2019
Modifié le 27 sept. 2019 à 12:11
Modifié le 27 sept. 2019 à 12:11
Etape 1 : J'ai lu et re relu c'est par ailleurs comme ça que j'ai fait ce code parce que je connaissait pas du tout avant.. Mais peut être pas tout compris
Etape 2 : ...du coup j'ai essayé de mettre en application ce qui est indiqué dans le liens...
Etape 3 : Je vais re-lire les docs :-)
En ce qui concerne mon code :
Je n'ai pas la main sur la requete et sur la bdd en gros même si le SET sert à rien comme on m'impose de faire avec cette requête je peux pas la bidouyer
Etape 2 : ...du coup j'ai essayé de mettre en application ce qui est indiqué dans le liens...
Etape 3 : Je vais re-lire les docs :-)
En ce qui concerne mon code :
Je n'ai pas la main sur la requete et sur la bdd en gros même si le SET sert à rien comme on m'impose de faire avec cette requête je peux pas la bidouyer
jordane45
Messages postés
38401
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
31 janvier 2025
4 732
>
Mickael_87
Messages postés
11
Date d'inscription
jeudi 26 septembre 2019
Statut
Membre
Dernière intervention
27 septembre 2019
27 sept. 2019 à 12:16
27 sept. 2019 à 12:16
Si tu veux conserver le "SET" .. ne découpe pas ton code en deux...
Ne fait qu'une seule requête...
Ne fait qu'une seule requête...
Mickael_87
Messages postés
11
Date d'inscription
jeudi 26 septembre 2019
Statut
Membre
Dernière intervention
27 septembre 2019
27 sept. 2019 à 12:20
27 sept. 2019 à 12:20
Quand je fais qu'une seule requête le temps de réponse est super long et cela me met ce message d'erreur :
Array ( [0] => Array ( [0] => 08001 [SQLSTATE] => 08001 [1] => 53 [code] => 53 [2] => [Microsoft][ODBC Driver 11 for SQL Server]Fournisseur de canaux nomm�s : Impossible d'ouvrir une connexion � SQL Server [53]. [message] => [Microsoft][ODBC Driver 11 for SQL Server]Fournisseur de canaux nomm�s : Impossible d'ouvrir une connexion � SQL Server [53]. ) [1] => Array ( [0] => HYT00 [SQLSTATE] => HYT00 [1] => 0 [code] => 0 [2] => [Microsoft][ODBC Driver 11 for SQL Server]D�lai d'attente de connexion expir� [message] => [Microsoft][ODBC Driver 11 for SQL Server]D�lai d'attente de connexion expir� ) [2] => Array ( [0] => 08001 [SQLSTATE] => 08001 [1] => 53 [code] => 53 [2] => [Microsoft][ODBC Driver 11 for SQL Server]Une erreur li�e au r�seau ou sp�cifique � l'instance s'est produite lors de l'�tablissement d'une connexion � SQL Server. Le serveur est introuvable ou n'est pas accessible. V�rifiez si le nom de l'instance est correct et si SQL Server est configur� pour autoriser les connexions distantes. Pour plus d'informations, consultez la documentation en ligne de SQL Server. [message] => [Microsoft][ODBC Driver 11 for SQL Server]Une erreur li�e au r�seau ou sp�cifique � l'instance s'est produite lors de l'�tablissement d'une connexion � SQL Server. Le serveur est introuvable ou n'est pas accessible. V�rifiez si le nom de l'instance est correct et si SQL Server est configur� pour autoriser les connexions distantes. Pour plus d'informations, consultez la documentation en ligne de SQL Server. ) )
Array ( [0] => Array ( [0] => 08001 [SQLSTATE] => 08001 [1] => 53 [code] => 53 [2] => [Microsoft][ODBC Driver 11 for SQL Server]Fournisseur de canaux nomm�s : Impossible d'ouvrir une connexion � SQL Server [53]. [message] => [Microsoft][ODBC Driver 11 for SQL Server]Fournisseur de canaux nomm�s : Impossible d'ouvrir une connexion � SQL Server [53]. ) [1] => Array ( [0] => HYT00 [SQLSTATE] => HYT00 [1] => 0 [code] => 0 [2] => [Microsoft][ODBC Driver 11 for SQL Server]D�lai d'attente de connexion expir� [message] => [Microsoft][ODBC Driver 11 for SQL Server]D�lai d'attente de connexion expir� ) [2] => Array ( [0] => 08001 [SQLSTATE] => 08001 [1] => 53 [code] => 53 [2] => [Microsoft][ODBC Driver 11 for SQL Server]Une erreur li�e au r�seau ou sp�cifique � l'instance s'est produite lors de l'�tablissement d'une connexion � SQL Server. Le serveur est introuvable ou n'est pas accessible. V�rifiez si le nom de l'instance est correct et si SQL Server est configur� pour autoriser les connexions distantes. Pour plus d'informations, consultez la documentation en ligne de SQL Server. [message] => [Microsoft][ODBC Driver 11 for SQL Server]Une erreur li�e au r�seau ou sp�cifique � l'instance s'est produite lors de l'�tablissement d'une connexion � SQL Server. Le serveur est introuvable ou n'est pas accessible. V�rifiez si le nom de l'instance est correct et si SQL Server est configur� pour autoriser les connexions distantes. Pour plus d'informations, consultez la documentation en ligne de SQL Server. ) )
jordane45
Messages postés
38401
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
31 janvier 2025
4 732
>
Mickael_87
Messages postés
11
Date d'inscription
jeudi 26 septembre 2019
Statut
Membre
Dernière intervention
27 septembre 2019
27 sept. 2019 à 12:27
27 sept. 2019 à 12:27
La lenteur est sûrement en rapport avec le message ....
Visiblement... ton code n'arrive pas à se connecter au serveur.... rien à voir avec le fait que tu fasses deux requêtes ou une seule.
De plus, (ça fait longtemps que j'ai pas touché à un sql serveur... ), ne faut-il pas séparer chaque instruction de ta requête par un point-virgule ? )
Tu n'as pas du bien lire les exemples du lien que je t'ai donné....
il faut utiliser des points d'interrogation pour les variables.... et passer autant de variables dans ton array que tu as de points d'interrogations dans ta requête.....
En gros, Ton code, devrait ressembler à ça :
Par contre si le message d'erreur continue d'indiquer que tu n'as pas pu te connecter.... ben... c'est que tu as un souci dans le code de connexion à la bdd ....
Visiblement... ton code n'arrive pas à se connecter au serveur.... rien à voir avec le fait que tu fasses deux requêtes ou une seule.
De plus, (ça fait longtemps que j'ai pas touché à un sql serveur... ), ne faut-il pas séparer chaque instruction de ta requête par un point-virgule ? )
Tu n'as pas du bien lire les exemples du lien que je t'ai donné....
il faut utiliser des points d'interrogation pour les variables.... et passer autant de variables dans ton array que tu as de points d'interrogations dans ta requête.....
En gros, Ton code, devrait ressembler à ça :
$params = array($article); $requete = "declare @art as integer; set @art = (select idarticle from art_gtin where gtin = ?); exec ps_cadenciermultisites @artnoid = @art"; $stmt1=sqlsrv_query($conn, $requete, $params);
Par contre si le message d'erreur continue d'indiquer que tu n'as pas pu te connecter.... ben... c'est que tu as un souci dans le code de connexion à la bdd ....
Mickael_87
Messages postés
11
Date d'inscription
jeudi 26 septembre 2019
Statut
Membre
Dernière intervention
27 septembre 2019
27 sept. 2019 à 11:01
27 sept. 2019 à 11:01
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Mickael_87
Messages postés
11
Date d'inscription
jeudi 26 septembre 2019
Statut
Membre
Dernière intervention
27 septembre 2019
27 sept. 2019 à 13:41
27 sept. 2019 à 13:41
Nouveau Problème : Message Erreur :
Array ( [0] => Array ( [0] => 22003 [SQLSTATE] => 22003 [1] => 248 [code] => 248 [2] => [Microsoft][ODBC Driver 11 for SQL Server][SQL Server]La conversion de la valeur varchar ' 3700177566718' a d�pass� une colonne int. [message] => [Microsoft][ODBC Driver 11 for SQL Server][SQL Server]La conversion de la valeur varchar ' 3700177566718' a d�pass� une colonne int. ) )
C'est le même message d'erreur qu'au tout début ....
Array ( [0] => Array ( [0] => 22003 [SQLSTATE] => 22003 [1] => 248 [code] => 248 [2] => [Microsoft][ODBC Driver 11 for SQL Server][SQL Server]La conversion de la valeur varchar ' 3700177566718' a d�pass� une colonne int. [message] => [Microsoft][ODBC Driver 11 for SQL Server][SQL Server]La conversion de la valeur varchar ' 3700177566718' a d�pass� une colonne int. ) )
C'est le même message d'erreur qu'au tout début ....
jordane45
Messages postés
38401
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
31 janvier 2025
4 732
27 sept. 2019 à 13:51
27 sept. 2019 à 13:51
On reprend...
As tu le message d'erreur si tu ne fais que ça ?
Ensuite, tu feras le même test avec ça
EDIT : En regardant bien ton message d'erreur... il semble que le nombre ait un espace devant
Essaye de voir si en retirant l'espace après le = ça corrige le souci
Cela peut aussi venir de la données contenue dans la table...
Que contient exactement le résultat de la requête
Tu peux éventuellement essayer d'en faire un CAST
https://sql.sh/fonctions/cast
.
As tu le message d'erreur si tu ne fais que ça ?
$params = array($article); $requete = "declare @art as integer; set @art = (select idarticle from art_gtin where gtin = ?); $stmt1=sqlsrv_query($conn, $requete, $params);
Ensuite, tu feras le même test avec ça
$params = array($article); $requete = "exec ps_cadenciermultisites @artnoid = 3700177566718 "; $stmt1=sqlsrv_query($conn, $requete, $params);
EDIT : En regardant bien ton message d'erreur... il semble que le nombre ait un espace devant
' 3700177566718'
Essaye de voir si en retirant l'espace après le = ça corrige le souci
set @art =(select idarticle from art_gtin where gtin = ?);
Cela peut aussi venir de la données contenue dans la table...
Que contient exactement le résultat de la requête
select idarticle from art_gtin where gtin = 115715
Tu peux éventuellement essayer d'en faire un CAST
https://sql.sh/fonctions/cast
.
Mickael_87
Messages postés
11
Date d'inscription
jeudi 26 septembre 2019
Statut
Membre
Dernière intervention
27 septembre 2019
27 sept. 2019 à 14:17
27 sept. 2019 à 14:17
Alors :
1er Test : Même Message d'erreur
2ème Test : Plus de message d'erreur mais je ne passe plus mon 115715 ni rien d'autre d'ailleurs...
3ème test : Même Message d'erreur
4ème Test : Le SELECT idarticle etc.. me donne encore le même message d'erreur à savoir :
Array ( [0] => Array ( [0] => 22003 [SQLSTATE] => 22003 [1] => 248 [code] => 248 [2] => [Microsoft][ODBC Driver 11 for SQL Server][SQL Server]La conversion de la valeur varchar ' 3700177566718' a d�pass� une colonne int. [message] => [Microsoft][ODBC Driver 11 for SQL Server][SQL Server]La conversion de la valeur varchar ' 3700177566718' a d�pass� une colonne int. ) )
1er Test : Même Message d'erreur
2ème Test : Plus de message d'erreur mais je ne passe plus mon 115715 ni rien d'autre d'ailleurs...
3ème test : Même Message d'erreur
4ème Test : Le SELECT idarticle etc.. me donne encore le même message d'erreur à savoir :
Array ( [0] => Array ( [0] => 22003 [SQLSTATE] => 22003 [1] => 248 [code] => 248 [2] => [Microsoft][ODBC Driver 11 for SQL Server][SQL Server]La conversion de la valeur varchar ' 3700177566718' a d�pass� une colonne int. [message] => [Microsoft][ODBC Driver 11 for SQL Server][SQL Server]La conversion de la valeur varchar ' 3700177566718' a d�pass� une colonne int. ) )
Mickael_87
Messages postés
11
Date d'inscription
jeudi 26 septembre 2019
Statut
Membre
Dernière intervention
27 septembre 2019
27 sept. 2019 à 14:33
27 sept. 2019 à 14:33
Et en faisant ce test
Cela me met ce message d'erreur : Array ( [0] => Array ( [0] => 42000 [SQLSTATE] => 42000 [1] => 102 [code] => 102 [2] => [Microsoft][ODBC Driver 11 for SQL Server][SQL Server]Syntaxe incorrecte vers 'INTEGER'. [message] => [Microsoft][ODBC Driver 11 for SQL Server][SQL Server]Syntaxe incorrecte vers 'INTEGER'. ) )
Et ça je pense pas que je puisse le faire parce que mon patron m'a mis qu'un accés en lecture seule sur la bdd..
$requetetest="SELECT CAST(idarticle AS SIGNED INTEGER) AS idarticle_cast FROM art_gtin where gtin = 115715";
Cela me met ce message d'erreur : Array ( [0] => Array ( [0] => 42000 [SQLSTATE] => 42000 [1] => 102 [code] => 102 [2] => [Microsoft][ODBC Driver 11 for SQL Server][SQL Server]Syntaxe incorrecte vers 'INTEGER'. [message] => [Microsoft][ODBC Driver 11 for SQL Server][SQL Server]Syntaxe incorrecte vers 'INTEGER'. ) )
Et ça je pense pas que je puisse le faire parce que mon patron m'a mis qu'un accés en lecture seule sur la bdd..
Mickael_87
Messages postés
11
Date d'inscription
jeudi 26 septembre 2019
Statut
Membre
Dernière intervention
27 septembre 2019
27 sept. 2019 à 15:43
27 sept. 2019 à 15:43
C'est bon j'ai réussi à enlever ce "La conversion de la valeur varchar ' 3700177566718' a d�pass� une colonne int" en mettant des simples cote autour du ? dans la requete.
Une autre question le traitement des résultats (et là j'ai trouver nul part) :
Comment faire pour récup le résultat de ma requete sachant qu'on ne m'a pas donné le nom des colonnes des tables de la bdd (j'ai eu aucune info sur la bdd en fait) et que ma page doit ressembler à ça :
Une autre question le traitement des résultats (et là j'ai trouver nul part) :
Comment faire pour récup le résultat de ma requete sachant qu'on ne m'a pas donné le nom des colonnes des tables de la bdd (j'ai eu aucune info sur la bdd en fait) et que ma page doit ressembler à ça :
26 sept. 2019 à 16:30
Déjà merci d'avoir pris le temps de me répondre.
Pour l'histoire du PDO comme je connaissait pas avant que l'on me donne ce projet je savais pas vraiment si c'était du PDO ou pas (d'où mon : "enfin je pense l'utiliser").
Ensuite, c'est une requête que mon patron m'a donnée et il la testé directement dans sa bdd elle marche. Pareil pour la procédure.
Enfin l'erreur du $stmt1=sqlsrv_query($conn, $requete1, $params2); en gros lorsque je fais ma première requète et mon var_dump($article) m'affiche C:\wamp\www\test\codephp.php:160:int 115715 (en vert et mon patron m'a demandé de tester avec ce nombre 115715)