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 :
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 ?
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; ?>
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) :
puis j'ai modifié le premier code en essayant ceci :
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()");
Le message d'erreur est :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 $proc = $_SESSION['lst_bout']; $proc->execute(); ...
Call to a member function execute() on a non-object
Donc si vous avez des idées pour y arriver je suis preneur !
Partager