web-dev-qa-db-fra.com

requêtes à l'intérieur d'une classe

Je construis un plugin et je suis assez nouveau sur Wordpress. J'ai une classe qui a quelques méthodes pour exécuter les requêtes de base de données. La classe regarde comme suit

class MyClass{

        private $wpdb;

        function __construct(){
            global $wpdb;

        }

        function query(){
        $wpdb->query( $wpdb->prepare("INSERT INTO $wpdb->wp_competitors

                        ( id, field_key, field_value ) VALUES ( %d, %s, %s )",1,

                        $field_key, $field_value) );

        }

     }

Je voudrais pouvoir utiliser à l'intérieur de ma classe la classe de base de données native wordpress, comment faire cela?

3
fefe
class MyClass{
    function __construct(){
        global $wpdb;
        $this->db = $wpdb;
    }

    function query(){
       return $this->db->query( 
            $this->db->prepare("INSERT INTO {$this->db->wp_competitors} (id, ield_key, field_value) VALUES ( %d, %s, %s )",
            1, $field_key, $field_value) 
       );
    }
}
3
Butuzov

L'utilisation d'une propriété $db personnalisée dans votre classe présente l'inconvénient de ne pas pouvoir l'utiliser dans les méthodes statiques, si jamais vous en créiez. Deux approches alternatives:

class MyClass {

    public function query1() {
        global $wpdb;
        $wpdb->query('SQL');
    }

    public function query2() {
        $GLOBALS['wpdb']->query('SQL');
    }

}
2
Geert