Не съм много добър с обясненията бру, но просто виждам, че след дълго време няма отговор. Създадох основен клас, за да вмъквате стойности с помощта на PDO, надявам се, че ще ви насочи към правилната посока, също така ще споделя някои полезни връзки за вас.
Първо се свържете.
Виждам, че вече сте направили връзката във вашия клас, но по-долу е най-добрата 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);
така настройвате правилна PDO връзка. dns означава име на източника на данни Препратка към горния https://phpdelusions.net/pdo#dsn този човек го обяснява по-добре. всичко, което трябва да знаете.
Сега как обединявате тази връзка с вашия клас?
добре, ще създам файл за събиране на pdoClass.php и ще работя от този клас.
<?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();
}
}
?>
по същество това е всичко, от което се нуждаете, за да настроите базата данни и функцията, която да вмъкнете във вашата db, опитах се да коментирам някои раздели.
Сега, за да използвате този клас, създайте index.php или каквото искате. след това включете класа
<?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";
}
?>
Готово, ако имате някакви въпроси или искате да обясня нещо, не се колебайте да коментирате по-долу, аз ще се опитам да ви помогна.
Редактиране: ако трябва да извлечете резултатите, можете също да създадете нова функция в класа,
Един ред:
public function SingleRow(){
$this->run();
return $this->stmt->fetch();
}
вижте, че използваме fetch();
за извличане само на един ред. повечето хора, когато извличат резултати, ще ги извличат така fetch(PDO::FETCH_ASSOC)
но тъй като направихме правилна връзка и дефинирахме нашия режим на извличане по подразбиране във връзката, нямаме нужда от всичко, което можем просто да използваме fetch()
;
за да покажете тези резултати във вашия файл index.php ето как ще направите:
$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>';
'; това ще покаже резултата на Joe като масив.
за да получите всички резултати от нашата база данни
правим друга функция за показване на всички резултати.
public function All(){
$this->run();
return $this->stmt->fetchall();
}
Виждате разликата, сега използваме fetchall()
защото искаме всички резултати.
$users->insertUserValues("SELECT * FROM test");
$row = $users->All();
echo '<pre>';
print_r($row);
echo '</pre>';
';