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