Ok, j'espère avoir tout bien listé avant de poster cette question parce que j'ai trouvé des morceaux d'une solution ici et là mais pas de vraie réponse à mon problème. 1: J'utilise une connexion MySQL singleton avec mysqli, n'utilisant pas de procédures stockées; 2: J'ai trouvé le code en ligne expliquant session_set_save_handler et l'ai intégré en tant que classe appelée MySqlSessionStore;PHP mysqli-> real_escape_string lors de l'utilisation des sessions enregistrées dans la base de données
3: dans ma classe de DB, il y a cette fonction publique:
public function escapeStringForDB($input)
{
return $this->_link->real_escape_string($input);
}
et $this->_link = new mysqli($host, $user, $password, $database)
4: $db = MySQL::getInstance(array(DB_SERVER, DB_USER, DB_PASS, DB_NAME));
Voilà comment j'appelle la fonction DB statique (rien hors de l'ordinaire ici)
Problème: tout fonctionne jusqu'à ce que je décommente $id = $db->escapeStringForDB($id);
, puis l'erreur suivante se produit:
appel à une fonction de membre real_escape_string() sur un non-objet
code Exemple de MySqlSessionStore:
function read($id)
{
$db = MySQL::getInstance(array(DB_SERVER, DB_USER, DB_PASS, DB_NAME));
$id = $db->escapeStringForDB($id);
$db->query("SELECT data FROM sessions WHERE BINARY id = '". $id ."'");
//echo "SELECT data FROM sessions WHERE id = '". $id ."'";
$result = $db->fetch();
if(isset($result) && !empty($result))
{
return $result->data;
}
//MUST send an empty string if no session data
return "";
}
Autres questions, remarques:
- J'utilise session_regenerate_id() mais apparemment cela doit être supprimé avec session_set_save_handler; Où puis-je mettre
session_write_close();
? Je l'ai dans le destructeur de ma classe db, mais peut-être que ce n'est pas la voie à suivre; - J'utilise cela sans nuire à d'autres projets, mais ici il semble que le comportement de gestionnaire de session est différent et me confondre :)
Merci à l'avance, si vous avez besoin plus d'informations je fournirai volontiers .
Je ne le déclarer comme statique, seule l'instance est. – qwertzman
Apparemment, la fonction de lecture du gestionnaire de session personnalisé transmet une chaîne, provoquant l'erreur. Je ne sais pas comment procéder avec la conversion de type ou toute autre conversion que je devrais faire ... – qwertzman
J'espère qu'un expert PHP OOP peut me donner un aperçu à ce sujet - Je suppose qu'il a quelque chose à voir avec le $ id étant sérialisé ou non? La fonction read() est la seule à produire ce problème: l'échappement fonctionne dans tous les autres gestionnaires de session personnalisés. – qwertzman