PHP-PDO-MySQL connection 'persistante' et stored-procedures
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:
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:
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:
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 !