sql >> Database teknologi >  >> RDS >> Mysql

Hvordan skriver man forberede og udføre erklæringer i OOP PDO?

Jeg er ikke rigtig god til forklaringer bru, men jeg ser bare, at der ikke er noget svar efter lang tid. Jeg har oprettet en grundlæggende klasse, hvor du kan indsætte værdier ved hjælp af PDO, jeg håber, at den vil pege dig i den rigtige retning, jeg vil også dele nogle nyttige links for dig.

Først forbindelsen.

Jeg kan se, at du allerede har oprettet forbindelsen i din klasse, men nedenfor er den rigtige bedste PDO-forbindelse.

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

det er sådan, du opretter en korrekt PDO-forbindelse. dns står for datakildenavn Reference til ovenstående https://phpdelusions.net/pdo#dsn denne fyr forklarer det bedre. alt hvad du behøver at vide.

Hvordan sætter du den forbindelse sammen med din klasse?

godt jeg vil oprette en fil collect pdoClass.php og arbejde fra den klasse.

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

?>

dybest set er det alt hvad du behøver for at opsætte databasen og funktionen til at indsætte i din db, jeg har forsøgt at kommentere nogle sektioner.

For at bruge denne klasse skal du oprette index.php eller hvad du nu kan lide. medtag derefter klassen

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

?>

Færdig, hvis du har spørgsmål eller kan lide mig til at forklare noget, er du velkommen til at kommentere nedenfor, jeg vil gøre mit bedste for at hjælpe dig.

Rediger: hvis du skal hente resultaterne, kan du også lave en ny funktion i klassen,

Enkelt række:

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

se vi bruger fetch(); kun at hente én række. de fleste mennesker, når de henter resultater, vil hente dem på denne måde fetch(PDO::FETCH_ASSOC) men fordi vi lavede en ordentlig forbindelse og definerede vores standard hente-tilstand i forbindelsen, har vi ikke brug for alt det, vi bare kan bruge fetch();

for at vise disse resultater på din index.php fil, er det sådan du vil gøre:

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

dette vil vise joes resultat som et array.

for at få alle resultater fra vores db

vi laver en anden funktion for at vise alle resultater.

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

Du kan se forskellen nu, vi bruger fetchall() fordi vi vil have alle resultaterne.

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

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


  1. Tilslutning af SAS JMP til Salesforce.com

  2. Konverter Jalali-kalender til gregoriansk med PHP i CodeIgniter

  3. ASP.NET Medlemskab/Rolleudbydere til MySQL?

  4. Find det sidste indeks af en streng i Oracle