Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment écrire des instructions de préparation et d'exécution dans OOP PDO ?

Je ne suis pas vraiment doué pour les explications bru, mais je vois juste qu'il n'y a pas de réponse après un long moment. J'ai créé une classe de base pour vous permettre d'insérer des valeurs à l'aide de PDO, j'espère qu'elle vous indiquera la bonne direction, je partagerai également quelques liens utiles pour vous.

D'abord la connexion.

Je vois que vous avez déjà fait la connexion dans votre classe, mais ci-dessous se trouve la meilleure connexion pdo appropriée.

    $host = '127.0.0.1';
    $db   = 'YourDatabase';
    $user = 'YourDBUser';
    $pass = 'YourDBPass';
    $charset = 'utf8';

    $dsn = "mysql:host=$host;dbname=$db;charset=$charset";
    $opt = [
            PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
            PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
            PDO::ATTR_EMULATE_PREPARES   => false,
            ];

$dbh = new PDO($dsn, $user, $pass, $opt);

c'est ainsi que vous configurez une connexion PDO appropriée. dns signifie nom de la source de données Référence de ce qui précède https://phpdelusions.net/pdo#dsn ce gars l'explique mieux. tout ce que vous devez savoir.

Maintenant, comment établissez-vous cette connexion avec votre classe ?

eh bien, je vais créer un fichier collect pdoClass.php et travailler à partir de cette classe.

<?php
class Connection
{
    private $host = "127.0.0.1";
    private $dbName = "YourDB";
    private $user = "YourUser";
    private $pass = "YourPass";
    private $charset = 'utf8';

    private $dbh;
    private $error;
    private $stmt;

    //connection
    public function __construct()
    {
        $dsn     = "mysql:host=" . $this->host . ";dbname=" . $this->dbName . ";charset=" . $this->charset;
        $options = array(
            PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
            PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
            PDO::ATTR_EMULATE_PREPARES => false
        );

        try {
            // setup connection
            $this->dbh = new PDO($dsn, $this->user, $this->pass, $options);
        }
        //catch any errors
        catch (PDOException $e) {
            $this->error = $e->getMessage();
        }

    }

    //prepare statement
    public function insertUserValues($query)
    {
        $this->stmt = $this->dbh->prepare($query);
    }

    //bind values
    public function bind($param, $value, $type = null)
    {
        if (is_null($type)) {
            switch (true) {
                case is_int($value):
                    $type = PDO::PARAM_INT;
                    break;
                case is_bool($value):
                    $type = PDO::PARAM_BOOL;
                    break;
                case is_null($value):
                    $type = PDO::PARAM_NULL;
                    break;
                default:
                    $type = PDO::PARAM_STR;
            }
        }
        //actual value binding
        $this->stmt->bindValue($param, $value, $type);
    }
    //execute statement
    public function run()
    {
        return $this->stmt->execute();
    }
}

?>

en gros, c'est tout ce dont vous avez besoin pour configurer la base de données et la fonction à insérer dans votre base de données, j'ai essayé de commenter certaines sections.

Maintenant, pour utiliser cette classe, créez index.php ou ce que vous voulez. puis incluez la classe

<?php
    include'pdoClass.php';


    $users = new Connection();

    $users->insertUserValues('INSERT INTO test (name, age, description) VALUES(?,?,?)');
    $users->bind(1, 'User'); //bind each value
    $users->bind(2, 391); // bind
    $users->bind(3, 'This is a value');
    if($database->run()){

        echo "record inserted";
    }

?>

Terminé, si vous avez des questions ou si vous souhaitez que j'explique quoi que ce soit, n'hésitez pas à commenter ci-dessous, je ferai de mon mieux pour vous aider.

Modifier : si vous avez besoin de récupérer les résultats, vous pouvez également créer une nouvelle fonction dans la classe,

Une seule ligne :

public function SingleRow(){
      $this->run();
      return $this->stmt->fetch();
  }

voir que nous utilisons fetch(); pour ne récupérer qu'une seule ligne. la plupart des gens quand ils récupèrent les résultats les récupèrent comme ceci fetch(PDO::FETCH_ASSOC) mais comme nous avons établi une connexion appropriée et défini notre mode de récupération par défaut dans la connexion, nous n'avons pas besoin de tout cela, nous pouvons simplement utiliser fetch();

pour afficher ces résultats sur votre fichier index.php voici comment vous allez procéder :

$users->insertUserValues("SELECT name, age, description FROM test WHERE name = :name");
$users->bind(':name','joe');
$row = $users->SingleRow();

echo '<pre>';
print_r($row);
echo '</pre>';
';

cela affichera le résultat de Joe sous forme de tableau.

pour obtenir tous les résultats de notre base de données

nous faisons une autre fonction pour afficher tous les résultats.

 public function All(){
          $this->run();
          return $this->stmt->fetchall();
      }

Vous voyez la différence maintenant nous utilisons fetchall() parce que nous voulons tous les résultats.

 $users->insertUserValues("SELECT *  FROM test");
    $row = $users->All();

    echo '<pre>';
    print_r($row);
    echo '</pre>';
';