Problème de bind de variables

ViPHP
ViPHP | 2577 Messages

23 mai 2012, 18:47

Bonjour,

Je voulais faire une fonction qui gère les accès à une base donnée.
<?PHP
    public static function query($sql,$type='',$param=array ()) {
        self::$stmt = self::$mysqli->prepare($sql);
        self::verify($sql);
        $data = array_merge(array(self::$stmt, $type), $param);
        call_user_func_array('mysqli_stmt_bind_param', $data);
        self::$stmt->execute();
    }
?>
Comme prévisible d'après la doc, j'ai l'erreur :
Warning: Parameter 3 to mysqli_stmt_bind_param() expected to be a reference, value given in /home/pascal/dev/include/database.php on line 78

Je me demande s'il est possible de corriger cette erreur ou de faire fonctionner une fonction de ce genre.

kny
Eléphanteau du PHP | 47 Messages

30 mai 2012, 17:07

Tu désires faire une fonction qui s'occupent des requêtes?
Pourquoi ne pas utiliser PDO? (Si j'ai bien compris ce que tu désires...)

ViPHP
ViPHP | 2577 Messages

31 mai 2012, 14:58

Bonjour,

Effectivement, j'en suis arrivé à la même conclusion et je me suis mis à PDO.
Ca marche pour ce que je veux faire.

kny
Eléphanteau du PHP | 47 Messages

31 mai 2012, 15:31

Après, tu peux créer une classe qui va s'occuper de gérer PDO, en singleton par exemple, pour n'avoir qu'une seule instance de PDO, un accès facilité aux requêtes, etc...
J'ai travaillé sur une classe telle que celle-ci, qui me sert finalement au quotidien (ce qui est l'intérêt finalement ^.^ ), si cela t'intéresse?

ViPHP
ViPHP | 2577 Messages

01 juin 2012, 09:59

Pour le moment, j'ai créer une classe static qui me permet de gérer mes tables. Comme je n'ai pas de page sans accès à la base de données, je fais une connexion systématique lors de l'include de la classe.
En gros j'ai une fonction par type d'ordre sql, insert, update, delete, select unique, select multiple (+function fetch). Chaque fonction me retour ce qui est nécessaire (id, nombre de ligne, ligne ou curseur).
Une couche me permet de faire les ordres sql de base suivant le nom de la table, les colonnes et leur type (via héritage) et suivant des paramètres propre à chaque action. Il me reste à gérer des exceptions genre index non unique, pas de maj, pas de suppression ou non trouvé. Les autres exceptions provoquent un arrêt du traitement avec une page propre.
Pour le moment, je mets au point le moteur qui enchaînent les opérations et gère l'affichage pour tester facilement les accès à la base de donnée.