PDO et procédure stockée

Petit nouveau ! | 7 Messages

08 juin 2010, 17:29

Bonjour,
Je n'arrive pas à interroger une procédure stockée sql server via pdo.

Voici ma procédure stockée :
CREATE PROCEDURE essai2
@type_centre nvarchar(5)
AS
BEGIN
	SELECT	Nom 
	FROM	Centre
	WHERE	Type_centre = @type_centre
END
et la façon dont je l'interroge en php :
$sqlconnect=mssql_connect("serveur", "sa", "xxxxxx");
$sqldb=mssql_select_db("bd_maj",$sqlconnect);
 
// appel et intitialisation 
$query = mssql_init("essai2", $sqlconnect);
 
$type_centre = "A";
 
mssql_bind($query, "@type_centre", &$type_centre, SQLVARCHAR); 
$result = mssql_execute($query);
while ($row = mssql_fetch_row($result))
{
echo "$row[0] </br>";
}
de cette manière cela fonctionne.
mais je voudrais l'interroger via PDO et je n'arrive pas du tout à rédiger le php
quelqu'un aurait-il une petite idée ?

voici ce que j'ai tenté de rédiger mais cela ne renvoie... RIEN !!
try {
	$bdd = new PDO('mssql:host=serveur;dbname=bd_maj', 'sa', 'xxxxxx');
	}
catch (Exception $e)
	{	
     die('Erreur : ' . $e->getMessage());
	}
 
 
	
$type_centre='A'; 
$query= $bdd->prepare('CALL essai2(?)'); 
$query->bindParam(1, $type_centre, PDO::PARAM_STR, 150);
 
$query->->execute(); 
 
while ($datas = $query->fetch())
		{
		$nom = $datas[0];
		echo $nom;
		}

ViPHP
ViPHP | 5462 Messages

08 juin 2010, 17:34

plus d'info ici : http://www.php.net/manual/fr/pdo.prepar ... ements.php

exemple 10 :wink:

EDIT : la c'est pas bon non plus $query->->execute(); c'est $query->execute();

Petit nouveau ! | 7 Messages

08 juin 2010, 17:47

Ah oui erreur de frappe !!
mais ce la ne change rien ;-) cela ne me renvoie tjs rien !!

j'ai regardé l'esemple 10 mais je n'arrive pas à l'appliquer à mon cas. ce que je cherche à faire c'est lui envoyer un paramètre en entrée et récupérer les données en sortie. Là si je comprends bien ce qui est écris ( :? ) il n'y a que un paramètre de sortie

ViPHP
ViPHP | 5462 Messages

08 juin 2010, 17:51

active la gestion des erreur PDO

http://www.php.net/manual/fr/pdo.error-handling.php (comme dans l'exemple)

fais aussi un
$result = $query->execute(); 
var_dump($result);  
pour voir si ca a marcher

Petit nouveau ! | 7 Messages

08 juin 2010, 17:57

J'obtiens :
Warning: PDOStatement::execute() [pdostatement.execute]: SQLSTATE[HY000]: General error: 10007 Syntaxe incorrecte vers 'A'. [10007] (severity 5) [(null)] in C:\ms4w\Apache\htdocs\....\test2.php on line 31
bool(false) 

ViPHP
ViPHP | 5462 Messages

08 juin 2010, 18:01

et si tu fais bindValue au lieu de bindParam ?

Petit nouveau ! | 7 Messages

09 juin 2010, 09:47

toujours le même message d'erreur...

ViPHP
ViPHP | 5462 Messages

09 juin 2010, 09:58

si tu mets un debugDumpParams ?
essaye sans la requête préparer (pour tester) avec query

Petit nouveau ! | 7 Messages

09 juin 2010, 10:28

Bon alors j'ai essayé en faisant un
 query("SELECT *** where ***='$***'");
ca marche bien mais je n'appelle pas de procédure stockée.... :?

2ème test : j'ai créé une procédure stockée simple, avec juste un select et sans paramètre :
$query= $bdd->query("CALL essai3'"); 
pareil ca marche rtès bien et je récupère mes données

3ème test : j'ai rajouté la ligne debugBumpParam à la requête préparée appelant une procédure stockée avec paramètre :
$type_centre='A'; 
$query= $bdd->prepare('CALL essai2(?)'); 
$query->bindParam(1, $type_centre, PDO::PARAM_STR); 
.........
$bdd->debugDumpParams();
---> et j'obtiens toujours un message d'erreur :
Warning: PDOStatement::execute() [pdostatement.execute]: SQLSTATE[HY000]: General error: 10007 Syntaxe incorrecte vers 'A'. [10007] (severity 5) [(null)] in C:\ms4w\Apache\htdocs\maj_parcellaires\test2.php on line 30

Fatal error: Call to undefined method PDO::debugDumpParams() in C:\ms4w\Apache\htdocs\maj_parcellaires\test2.php on line 39

ViPHP
ViPHP | 5462 Messages

09 juin 2010, 10:35

et celui la
$query= $bdd->query("CALL essai3");
mais en requête préparer ?

celui la aussi
$query= $bdd->query("CALL essai2('A')");

Petit nouveau ! | 7 Messages

09 juin 2010, 11:16

Bon alors j'ai écris une bétise : appeler une simple procédure stockée sans paramètre avec un query ne fonctionne pas :
$query= $bdd->query("CALL essai4()"); 
me renvoie
Warning: PDO::query() [pdo.query]: SQLSTATE[HY000]: General error: 10007 Syntaxe incorrecte vers ')'. [10007] (severity 5) [CALL essai4()] in C:\ms4w\Apache\htdocs\maj_parcellaires\test3.php on line 26
$query= $bdd->query("CALL essai2('A')");
me renvoie toujours le même message d'erreur !!!

c'est désespérant :shock:

Petit nouveau ! | 7 Messages

09 juin 2010, 17:54

Bon à priori ca marche !!!!!!!! :D
ca intéressera peut-être qq1 d'autre donc voilà comment j'ai fais.

Procédure stockée :
CREATE PROCEDURE essai2
@type_centre nvarchar(5)
AS
BEGIN
        SELECT  Nom 
        FROM    Centre
        WHERE   Type_centre = @type_centre
END
Et le fichier php
try {
        $bdd = new PDO('mssql:host=serveur;dbname=bd_maj', 'sa', 'xxxxxx');
        }
catch (Exception $e)
        {       
     die('Erreur : ' . $e->getMessage());
        }
        
$type_centre='A'; 
$query= $bdd->prepare('EXECUTE essai2 ?'); 
$query->bindParam(1, $type_centre, PDO::PARAM_STR, 150);
 
$query->->execute(); 
 
while ($datas = $query->fetch())
                {
                $nom = $datas[0];
                echo $nom;
                }

J'en aurais passé des heures à chercher !!
stealth35 un grand merci pour ton aide !!