Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Bagaimana cara menulis pernyataan persiapan dan eksekusi di OOP PDO?

Saya tidak terlalu bagus dengan penjelasannya, tetapi saya hanya melihat bahwa tidak ada jawaban setelah waktu yang lama. Saya telah membuat kelas dasar bagi Anda untuk memasukkan nilai menggunakan PDO, saya harap ini akan mengarahkan Anda ke arah yang benar, saya juga akan membagikan beberapa tautan yang berguna untuk Anda.

Sambungkan dulu.

Saya dapat melihat Anda telah melakukan koneksi di kelas Anda, tetapi di bawah ini adalah koneksi pdo terbaik yang tepat.

    $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);

begitulah cara Anda mengatur koneksi PDO yang tepat. dns singkatan dari nama sumber data Referensi https://phpdelusions.net/pdo#dsn di atas orang ini menjelaskannya dengan lebih baik. semua yang perlu Anda ketahui.

Sekarang bagaimana Anda menyatukan semua koneksi itu dengan kelas Anda?

baik saya akan membuat file mengumpulkan pdoClass.php dan bekerja dari kelas itu.

<?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();
    }
}

?>

pada dasarnya hanya itu yang Anda perlukan untuk mengatur database dan fungsi untuk menyisipkan di db Anda, saya telah mencoba mengomentari beberapa bagian.

Sekarang untuk menggunakan kelas ini buat index.php atau apa pun yang Anda suka. lalu sertakan kelasnya

<?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";
    }

?>

Selesai, jika Anda memiliki pertanyaan atau ingin saya menjelaskan sesuatu, jangan ragu untuk berkomentar di bawah ini, saya akan mencoba yang terbaik untuk membantu Anda.

Sunting : jika Anda perlu mengambil hasilnya, Anda juga dapat membuat fungsi baru di kelas,

Satu baris :

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

lihat kita menggunakan fetch(); untuk hanya mengambil satu baris. kebanyakan orang ketika mereka mengambil hasil akan mengambilnya seperti ini fetch(PDO::FETCH_ASSOC) tetapi karena kami melakukan koneksi yang tepat dan mendefinisikan mode pengambilan default kami dalam koneksi, kami tidak memerlukan semua yang kami dapat gunakan fetch();

untuk menampilkan hasil tersebut pada file index.php Anda, inilah yang akan Anda lakukan :

$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>';
';

ini akan menampilkan hasil joe sebagai array.

untuk mendapatkan semua hasil dari db kami

kami melakukan fungsi lain untuk menampilkan semua hasil.

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

Anda lihat perbedaannya sekarang kami menggunakan fetchall() karena kami menginginkan semua hasil.

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

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara menghilangkan hanya duplikat terus menerus tetapi tidak semua duplikat dalam kueri pemilihan (MySQL)?

  2. Muat data dari database + ajax + php

  3. MySQL Jelaskan batas baris

  4. 'Akses ditolak untuk pengguna 'root'@'localhost' (menggunakan kata sandi:TIDAK)'

  5. JPA Qyery untuk menemukan catatan di antara rentang