Intereting Posts
Извлечь объект JSON внутри объекта JSON через php Хранение хэшированного идентификатора в БД и извлечение его или создание хэшированного идентификатора в самом коде и его использование? Почему некоторые скрипты опускают закрывающий тег PHP, '?>'? PhpStorm не откроет файл моментального снимка профайлера xdebug Выделение поиска mysql & php Создание графика jqplot с использованием php Array копирует значения в ключи в PHP Как загрузить tmp_name загруженного файла в Laravel 5.0 Symfony Bundle: как избежать использования __DIR__ для построения пути к сопоставлениям Doctrine удалите пустые теги <p> из коротких кодов WordPress с помощью php functon Как отключить ручной ввод для поля JQuery UI Datepicker? Добавление пользовательского элемента формы в форму Adminhtml .htaccess mod_rewrite> 500 Внутренняя ошибка сервера Активный токен доступа должен использоваться для запроса информации о текущем пользователе и OAuthException => 2500 Получить версию расширения в php

Как писать отчеты о подготовке и выполнении в OOP PDO?

У меня здесь небольшая проблема. Я новичок в ООП, поэтому вопрос может звучать глупо, но я не нашел никакой полезной информации.

Я пытаюсь войти в базу данных и поместить введенные пользователем значения внутри нее, и я хочу спросить вас, где я должен писать отчеты о подготовке и выполнении PDO? Я знаю, что они нужны, но я понятия не имею, как правильно его написать … Кроме того, я также получил сообщение об ошибке «Объект класса PDO не может быть преобразован в строку в строке 24». Спасибо за любую помощь, вот мой код:

<?php class Connection { public $connection; public $dbHost = 'localhost'; public $dbName = 'employees'; public $charset = 'charset=utf8'; public $dbUser = 'root'; public $dbPassword = ''; public function __construct() { try { $this->connection = new PDO ("mysql:host=$this->dbHost;$this->dbName;$this->dbUser; $this->dbPassword"); $this->connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch (PDOException $e) { echo "There is something wrong with the database".$e->getMessage(); } } function insertUserValues($tableName, $data) { $query = "INSERT INTO ".$tableName."("; $query .= implode (",",array_keys($data)).') VALUES ('; $query .= "'" . implode ("','",array_values($data))."')"; } } $users = new Connection(); ?> 

Solutions Collecting From Web of "Как писать отчеты о подготовке и выполнении в OOP PDO?"

Я не очень хорошо разбираюсь в объяснениях bru, но я просто вижу, что после этого ответа нет. Я создал базовый класс для того, чтобы вы вставляли значения с помощью 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 как массив.

получить все результаты от нашего db

мы делаем еще одну функцию для отображения всех результатов.

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