J'essaye de créer une abstraction de base de données très simple, une partie en utilisant des requêtes préparées.implémenter une requête préparée simple en PHP
Maintenant, j'ai une fonction prend une chaîne de requête et un tableau de valeurs comme ceci:
$query = "SELECT `first_name`, `last_name` FROM ::table_name WHERE `id` = :id"
$values = array(
'table_name' = $this->table_name,
'id' = $user_id,
);
cela va créer une requête comme ceci:
SELECT `first_name`, `last_name` FROM `sometablename` WHERE `id` = '1234'
mon problème est le suivant:
J'utilise preg_replace_callback
pour récupérer les identificateurs :: et identificateurs de la chaîne de requête, puis l'envoyer à une fonction de nettoyage. Le problème est, j'ai aussi besoin d'envoyer le tableau de valeurs, afin que la fonction puisse prendre la correspondance de l'expression rationnelle, obtenir l'élément dans le tableau de valeurs avec cette clé, échapper la valeur, l'insérer dans les bons guillemets et le retourner .
Mais je ne peux pas transmettre d'informations supplémentaires au rappel. Je pourrais utiliser une variable statique privée, mais c'est très hacky.
Quelle est une autre approche à cela?
c'est parfait! Je souhaite que je lise ceci avant que j'aie utilisé une grande classe pour le manipuler ... Je suppose que je le changerai à cette version plus simple. Je vous remercie! –
Ou vous pouvez utiliser http://php.net/manual/en/function.preg-replace-callback.php. Je n'aime pas l'idée de mettre du code dans les chaînes. – mpen
@Mark - Carson précise que 'preg_replace_callback()' ne fonctionne pas pour lui, car vous ne pouvez pas passer de paramètres supplémentaires à la fonction de rappel. Utiliser 'preg_replace()' avec l'option 'e' est la solution de rechange. Notez aussi que 'preg_replace_callback()' utilise du code évalué, donc c'est juste la nature de la situation. – zombat