Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie schreibe ich Vorbereitungs- und Ausführungsanweisungen in OOP PDO?

Ich bin nicht wirklich gut mit Erklärungen, bru, aber ich sehe einfach, dass es nach langer Zeit keine Antwort gibt. Ich habe eine grundlegende Klasse für Sie erstellt, um Werte mit PDO einzufügen, ich hoffe, sie weist Sie in die richtige Richtung, ich werde auch einige nützliche Links für Sie teilen.

Zuerst die Verbindung.

Ich kann sehen, dass Sie die Verbindung bereits in Ihrer Klasse hergestellt haben, aber unten ist die richtige beste PDO-Verbindung.

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

So richten Sie eine ordnungsgemäße PDO-Verbindung ein. DNS steht für Datenquellenname Verweis auf den oben genannten https://phpdelusions.net/pdo#dsn dieser Typ erklärt es besser. alles, was Sie wissen müssen.

Nun, wie stellen Sie diese Verbindung mit Ihrer Klasse zusammen?

Nun, ich werde eine Datei erstellen, die pdoClass.php sammelt und von dieser Klasse aus arbeiten.

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

?>

Im Grunde ist das alles, was Sie brauchen, um die Datenbank einzurichten und die Funktion in Ihre Datenbank einzufügen. Ich habe versucht, einige Abschnitte zu kommentieren.

Um diese Klasse zu verwenden, erstellen Sie jetzt index.php oder was auch immer Sie möchten. Dann schließen Sie die Klasse ein

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

?>

Fertig, wenn Sie Fragen haben oder möchten, dass ich etwas erkläre, können Sie unten einen Kommentar hinterlassen. Ich werde mein Bestes geben, um Ihnen zu helfen.

Bearbeiten: Wenn Sie die Ergebnisse abrufen müssen, können Sie auch eine neue Funktion in der Klasse

erstellen

Eine Reihe :

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

siehe, wir verwenden fetch(); um nur eine Zeile zu holen. Die meisten Leute, wenn sie Ergebnisse abrufen, werden sie wie folgt abrufen:fetch(PDO::FETCH_ASSOC) aber weil wir eine richtige Verbindung hergestellt und unseren Standard-Fetch-Modus in der Verbindung definiert haben, brauchen wir nicht alles, was wir einfach verwenden können fetch();

Um diese Ergebnisse in Ihrer index.php-Datei anzuzeigen, gehen Sie wie folgt vor:

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

Dadurch wird Joes Ergebnis als Array angezeigt.

um alle Ergebnisse aus unserer Datenbank zu erhalten

Wir machen eine andere Funktion, um alle Ergebnisse anzuzeigen.

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

Sie sehen jetzt den Unterschied, wir verwenden fetchall() weil wir alle Ergebnisse wollen.

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

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