sql >> Databáze >  >> RDS >> Mysql

Jak napsat připravit a provést příkazy v OOP PDO?

Nejsem moc dobrý s vysvětlováním bru, ale vidím, že po dlouhé době žádná odpověď. Vytvořil jsem pro vás základní třídu pro vkládání hodnot pomocí PDO, doufám, že vás nasměruje správným směrem, také se pro vás podělím o několik užitečných odkazů.

Nejprve se připojte.

Vidím, že jste připojení již provedli ve své třídě, ale níže je správné nejlepší připojení 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);

tak nastavíte správné připojení PDO. dns znamená název zdroje dat Odkaz na výše uvedené https://phpdelusions.net/pdo#dsn ten chlap to vysvětluje lépe. vše, co potřebujete vědět.

Jak nyní spojíte toto spojení se svou třídou?

no, vytvořím soubor collect pdoClass.php a budu pracovat z této třídy.

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

?>

v podstatě to je vše, co potřebujete k nastavení databáze a funkce, kterou chcete vložit do vaší databáze, pokusil jsem se okomentovat některé sekce.

Nyní pro použití této třídy vytvořte index.php nebo cokoli jiného chcete. pak zahrňte třídu

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

?>

Hotovo, pokud máte nějaké dotazy nebo chcete, abych vám cokoli vysvětlil, neváhejte se vyjádřit níže, pokusím se vám co nejlépe pomoci.

Upravit: pokud potřebujete načíst výsledky, můžete také vytvořit novou funkci ve třídě,

Jeden řádek:

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

vidíme, že používáme fetch(); načíst pouze jeden řádek. většina lidí, když načítají výsledky, je načte takto fetch(PDO::FETCH_ASSOC) ale protože jsme provedli správné připojení a definovali náš výchozí režim načítání v připojení, nepotřebujeme vše, co můžeme použít pouze fetch();

pro zobrazení těchto výsledků v souboru index.php postupujte takto:

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

toto zobrazí joeův výsledek jako pole.

získat všechny výsledky z naší databáze

provádíme další funkci pro zobrazení všech výsledků.

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

Nyní vidíte rozdíl, když používáme fetchall() protože chceme všechny výsledky.

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

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


  1. Volání funkcí MySQL v Lithiu

  2. Jak funguje current_timestamp() v PostgreSQL

  3. Jaký je ekvivalent PostgreSQL pro ISNULL()

  4. Průvodce návrhem databáze pro Správce úloh v MySQL