Je développe un site avec AJAX sur une base MySQL, cherchant à optimiser les ressources du serveur et les temps de réponse je transpose toutes les requêtes du code PHP en stored-procedure.

Exemple de code PHP :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
	include("glob_min.php");
	header('Content-type: application/xml; charset=ISO-8859-15');	
	$xml = '<?xml version="1.0" encoding="ISO-8859-15"?><results action= "test">';
	$BD1 = new PDO('mysql:host=localhost;dbname=' . $_SESSION['base'], $_SESSION['log'], $_SESSION['pwd']);			
	$proc = $BD1->prepare("CALL lst_bou()");
	$proc->execute();
        $html = '';			
	while ($row = $proc->fetch())
	{
	       $html .= '<a href="" title="Voir les produits de cette boutique..."><img src="' . $row[1] . '/boutique_' . $row[1] . '.png"></a>';
	}
	$xml .= '<![CDATA[' . $html . ']]></results>';
	echo $xml;	
?>
J'ai plusieurs page PHP comme celle-ci qui vont utiliser mes stored-procedure, j'aurais donc voulu ne faire qu'une seule fois l'ouverture de la base $BD1, et le $proc[n] = $BD1->prepare de chaque procedure stockée, dans une page php appelée une seule fois à la connection de l'utilisateur. Ce qui, à mon avis serait le plus rapide ?

Le(s) problème(s) que je rencontre est/sont :
- la base $BD1 se referme une fois le script PHP terminé (connection persistante ?),
- le seul moyen que je connaisse pour partager des variables entre pages PHP, c'est $_SESSION[] ?

J'ai donc essayé ceci dans ma page 'globale' (appelée une seule fois) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
$BD1 = new PDO('mysql:host=localhost;dbname=' . $Params[0], $Params[1], $Params[2]);
$_SESSION['lst_bout'] = $BD1->prepare("CALL lst_bou()");
puis j'ai modifié le premier code en essayant ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
$proc = $_SESSION['lst_bout']; 
$proc->execute();
...
Le message d'erreur est :
Call to a member function execute() on a non-object

Donc si vous avez des idées pour y arriver je suis preneur !