sql >> Database >  >> RDS >> Mysql

Hoe te schrijven voorbereiden en uitvoeren van verklaringen in OOP PDO?

Ik ben niet echt goed in uitleg bru, maar ik zie net dat er na een lange tijd geen antwoord komt. Ik heb een basisklasse voor je gemaakt om waarden in te voegen met PDO, ik hoop dat het je in de juiste richting zal wijzen, ik zal ook enkele nuttige links voor je delen.

Eerst de verbinding.

Ik kan zien dat je de verbinding al in je klas hebt gemaakt, maar hieronder is de juiste beste pdo-verbinding.

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

zo zet u de juiste PDO-verbinding op. dns staat voor naam gegevensbron Referentie van de bovenstaande https://phpdelusions.net/pdo#dsn deze man legt het beter uit. alles wat je moet weten.

Hoe breng je die connectie nu samen met je klas?

Nou, ik zal een bestand maken om pdoClass.php te verzamelen en vanuit die klasse te werken.

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

?>

eigenlijk is dat alles wat je nodig hebt om de database in te stellen en de functie om in je db in te voegen, ik heb geprobeerd een aantal secties te becommentariëren.

Om deze klasse te gebruiken, maakt u index.php of wat u maar wilt. voeg dan de klas toe

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

?>

Klaar, als je een vraag hebt of als ik iets wil uitleggen, reageer dan hieronder. Ik zal mijn best doen om je te helpen.

Bewerken: als je de resultaten moet ophalen, kun je ook een nieuwe functie in de klasse maken,

Enkele rij :

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

zie we gebruiken fetch(); om slechts één rij op te halen. de meeste mensen halen resultaten op als ze deze als volgt ophalen fetch(PDO::FETCH_ASSOC) maar omdat we een goede verbinding hebben gemaakt en onze standaard ophaalmodus in de verbinding hebben gedefinieerd, hebben we niet alles nodig dat we gewoon kunnen gebruiken fetch();

om die resultaten in uw index.php-bestand weer te geven, gaat u als volgt te werk:

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

dit zal Joe's resultaat als een array weergeven.

om alle resultaten van onze db te krijgen

we doen een andere functie om alle resultaten weer te geven.

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

Je ziet het verschil nu we fetchall() gebruiken omdat we alle resultaten willen.

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

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


  1. Controleer de status van alle database-e-mailberichten in SQL Server (T-SQL)

  2. Hoe refcursor resultaat/output te zien in Oracle SQL Developer?

  3. Unieke beperking die twee kolommen in MySQL controleert

  4. Laad tekst in tekstgebied via ajax-oproep