Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak pisać instrukcje przygotowania i wykonania w OOP PDO?

Nie jestem zbyt dobry z wyjaśnieniami bru, ale po prostu widzę, że po długim czasie nie ma odpowiedzi. Stworzyłem dla Ciebie podstawową klasę do wstawiania wartości za pomocą PDO, mam nadzieję, że wskaże Ci ona właściwy kierunek, podzielę się również kilkoma przydatnymi linkami.

Najpierw połącz.

Widzę, że wykonałeś połączenie już w swojej klasie, ale poniżej znajduje się właściwe najlepsze połączenie 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);

w ten sposób konfigurujesz prawidłowe połączenie PDO. dns oznacza nazwa źródła danych Odniesienie do powyższego https://phpdelusions.net/pdo#dsn ten facet wyjaśnia to lepiej. wszystko, co musisz wiedzieć.

Jak połączyć to połączenie ze swoją klasą?

cóż, utworzę plik zbierający pdoClass.php i pracuję z tą klasą.

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

?>

w zasadzie to wszystko, czego potrzebujesz, aby skonfigurować bazę danych i funkcję do wstawienia do bazy danych, próbowałem skomentować niektóre sekcje.

Teraz, aby użyć tej klasy, utwórz index.php lub cokolwiek chcesz. następnie dołącz klasę

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

?>

Gotowe, jeśli masz jakieś pytania lub chcesz coś wyjaśnić, śmiało skomentuj poniżej, postaram się jak najlepiej ci pomóc.

Edytuj: jeśli chcesz pobrać wyniki, możesz także utworzyć nową funkcję w klasie,

Pojedynczy wiersz:

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

zobacz używamy fetch(); pobrać tylko jeden wiersz. większość ludzi, gdy pobierze wyniki, pobierze je w ten sposób fetch(PDO::FETCH_ASSOC) ale ponieważ wykonaliśmy prawidłowe połączenie i zdefiniowaliśmy nasz domyślny tryb pobierania w połączeniu, nie potrzebujemy wszystkiego, co możemy po prostu użyć fetch();

aby wyświetlić te wyniki w pliku index.php, tak zrobisz:

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

spowoduje to wyświetlenie wyniku joe w postaci tablicy.

aby uzyskać wszystkie wyniki z naszej bazy danych

wykonujemy inną funkcję, aby wyświetlić wszystkie wyniki.

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

Widzisz różnicę, teraz używamy fetchall() ponieważ zależy nam na wszystkich wynikach.

 $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 - Liczenie dwóch rzeczy o różnych warunkach

  2. Laravel:Ciąg danych, obcięty do prawej:1406 Dane za długie dla kolumny

  3. PyMySQL zwraca stare/migawkowe wartości/nie uruchamia ponownie zapytania?

  4. linux mysql-server nie może znaleźć mysql_config

  5. Zagnieżdżony model zestawu, policz elementy w kategoriach