#php #mysql #list #pdo
#php #mysql #Список #pdo
Вопрос:
Я совершенно не знаком с php. Я хочу создать меню, взяв объекты из базы данных, но меня смущают все разные способы сделать это (как из школы, так и из Интернета), и мне нужно навести порядок в уме.
Это то, что я делал до сих пор, я использую для этого два разных класса.
Db.php
class Db extends PDO {
private $uname;
private $passwd;
private $hostname;
private $dbname;
public function __construct() {
$this->uname = "root";
$this->passwd = "";
$this->hostname = "127.0.0.1";
$this->dbname = "myclienti";
try {
parent::__construct('mysql:charset=utf8mb4;host=' . $this->hostname . ';dbname=' . $this->dbname, $this->uname, $this->passwd);
} catch (PDOException $e) {
echo $e->getMessage();
}
}
}
Servizie.php
class Servizie {
private $codice_utente;
private $desc_servizio;
private $puntopresa;
function getCodice_utente() {
return $this->codice_utente;
}
function getDesc_servizio() {
return $this->desc_servizio;
}
function getPuntopresa() {
return $this->puntopresa;
}
function setCodice_utente($codice_utente) {
$this->codice_utente = $codice_utente;
}
function setDesc_servizio($desc_servizio) {
$this->desc_servizio = $desc_servizio;
}
function setPuntopresa($puntopresa) {
$this->puntopresa = $puntopresa;
}
public function getAllServizie() {
$db = new Db();
$query = 'select CODICE_UTENTE, DESC_SERVIZIO, PUNTOPRESA from serviziele';
$statement = $db->prepare($query);
$statement->execute();
$object = $statement->fetchAll(PDO::FETCH_ASSOC);
return $object;
}
}
Часть моей индексной страницы, где я хочу разместить свое меню.
<?php
$servizie = new Servizie();
$list = $servizie->getAllServizie();
echo '<div id="dropdown-contentelectr">';
foreach ($list as $element){
echo '<a href="#">' . $element->PUNTOPRESA . '</a>';
}
echo '</div>';
?>
Извините за мой английский.
Комментарии:
1. Поскольку вы выбрали ассоциативный массив, вам нужно использовать
$element['PUNTOPRESA']
вместо объектной нотации.2. Или используйте
PDO::FETCH_OBJ
вместо этого.3. от serviziele мой nizzle!
4. Это работает, спасибо.
Ответ №1:
При выборке в виде ассоциативного массива вы восстанавливаете данные по индексу
$element['PUNTOPRESA'];
Если вы хотите получить как класс / экземпляр, используйте:
PDO::FETCH_INTO
PDO::FETCH_CLASS
Или для stdClass который возвращает анонимный объект.
PDO::FETCH_OBJ
Это позволит получить доступ к свойствам выбранного объекта с обозначением стрелки.
Использование:
statement->fetchAll(PDO::FETCH_OBJ);
Подробнее читайте:
http://php.net/manual/en/pdostatement .fetch.php
Если вам нужен пример класса базы данных, посмотрите на это (это часть микро-фреймворка, поэтому просто возьмите его в качестве примера, написанного мной): https://github.com/yuxblank/phackp/blob/master/src/phackp/core/Database.php
Комментарии:
1. В вашем классе есть некоторые критические ошибки. Возможно, вам пригодится эта статья, которую я написал после пересмотра десятков оболочек PHP, детских болезней вашей первой оболочки базы данных
2. Спасибо, это всего лишь альфа-версия. Я дам чтение, чтобы оптимизировать его и выпустить стабильный релиз. Если вы хотите отредактировать и опубликовать более полное решение, это нормально для меня.
3. Ну, если вы спросите меня, более полное решение было бы таким же простым, как простая функция run() отсюда: phpdelusions.net/pdo/pdo_wrapper#run Все остальное будет обработано PDO.
4. Мне это не очень нравится. Во-первых, таким образом вы все равно создаете много шаблонного кода и создаете что-то вроде фасадов (используя статические методы, одноэлементный способ), которые я бы не использовал. Каждый раз, когда вы получаете оператор, его нужно снова кодировать (так скучно!), И каждый класс должен использовать PDO, Чтобы знать о режимах выборки и т. Д. И т. Д. Мой способ (хотя еще рано) обеспечивает более понятный / быстрый способ доступа к pdo (упрощенный интерфейс). Возможно, вы потеряете некоторую производительность (не так много), но код будет меньше и больше совпадать (хотя и менее полным)
5. Вы просто не получили этот код. Никто не просит вас создавать синглтон, и никто не просит вас совместно кодировать оператор. На самом деле без режимов выборки pdo вы теряете много функций PDO, что в итоге заставляет вас писать много шаблонов. Но все в порядке — всегда требуется время, чтобы понять, что более простой код лучше, так что просто потратьте свое время.