Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да напиша подготвителни и изпълними оператори в OOP PDO?

Не съм много добър с обясненията бру, но просто виждам, че след дълго време няма отговор. Създадох основен клас, за да вмъквате стойности с помощта на PDO, надявам се, че ще ви насочи към правилната посока, също така ще споделя някои полезни връзки за вас.

Първо се свържете.

Виждам, че вече сте направили връзката във вашия клас, но по-долу е най-добрата PDO връзка.

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

така настройвате правилна PDO връзка. dns означава име на източника на данни Препратка към горния https://phpdelusions.net/pdo#dsn този човек го обяснява по-добре. всичко, което трябва да знаете.

Сега как обединявате тази връзка с вашия клас?

добре, ще създам файл за събиране на pdoClass.php и ще работя от този клас.

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

?>

по същество това е всичко, от което се нуждаете, за да настроите базата данни и функцията, която да вмъкнете във вашата db, опитах се да коментирам някои раздели.

Сега, за да използвате този клас, създайте index.php или каквото искате. след това включете класа

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

?>

Готово, ако имате някакви въпроси или искате да обясня нещо, не се колебайте да коментирате по-долу, аз ще се опитам да ви помогна.

Редактиране: ако трябва да извлечете резултатите, можете също да създадете нова функция в класа,

Един ред:

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

вижте, че използваме fetch(); за извличане само на един ред. повечето хора, когато извличат резултати, ще ги извличат така fetch(PDO::FETCH_ASSOC) но тъй като направихме правилна връзка и дефинирахме нашия режим на извличане по подразбиране във връзката, нямаме нужда от всичко, което можем просто да използваме fetch();

за да покажете тези резултати във вашия файл index.php ето как ще направите:

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

това ще покаже резултата на Joe като масив.

за да получите всички резултати от нашата база данни

правим друга функция за показване на всички резултати.

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

Виждате разликата, сега използваме fetchall() защото искаме всички резултати.

 $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. MySQL CURRENT_TIMESTAMP като DEFAULT

  2. LEFT JOIN само първия ред

  3. Сортиране на поддърво в йерархична структура от данни на затваряща таблица

  4. Как да дам на всеки регистриран потребител свой собствен URL с помощта на PHP?

  5. таблица за релации на заявка срещу друга колона