Вопрос-Ответ по ООП PHP

Печать RSS
2698


Пацак
0
@KpuTuK, все равно не катит: теперь ошибку выдает: "вызов неопределенного метода query". Все ништяк должно быть по идее.
@php (Сегодня / 15:51)
естественно. ты подготовил запрос и теперь его нужно ВЫПОЛНИТЬ,
$result ->execute();

почитай внимательней про PDO https://www.php.net/manual/ru/class.pdo.php

Оранжевые штаны
0
php, я использую MySQLi, но думаю не составит труда подправить, сильно расписывать не стану, дальше думай сам, суть я думаю ясна.
class Db {
	private $db = null, $sql, $db_count = null;
	public $test, $mest, $fest;
	public function __construct(){
		if(!$this->db){
			$this->db = new mysqli('localhost','test','pass*visavi','test');
			$this->db->set_charset('utf8');
		}
	}
	public function query($query = null){
		++$db_count;
		$this->sql = $this->db->query($query);
		if(!$this->sql) die($this->db->error);
		return $this->sql;
	}
}

$db = new Db;
$query = $db->query("SELECT ...");
while($data = $query->fetch_object()) var_dump($data);
Изменил: Dmitry Kokorin (23.04.2019 / 20:05)
P

Чатланин
0
KpuTuK, а, ну да) бг select выполнил execute() без параметров.
И все равно Fatal error: Uncaught Error: Call to undefined method PDOStatement::query() in blin

Добавлено через 00:48 сек.
Dmitry Kokorin, я бы еще __destruct() добавил, чтобы закрыть. Но я хочу сначала разобраться в своей ошибке.

Добавлено через 09:37 сек.
Dmitry Kokorin, кстати, твой класс рабочий, а мой нет oy
Изменил: php (23.04.2019 / 21:22)
P

Чатланин
0
KpuTuK, да и зачем там execute()???

Вот мой же код:
require_once 'db_connect.php';

$sql = 'SELECT * FROM articles ORDER BY date DESC';
$query = $db->query($sql);

while ($row = $query->fetch(PDO:: FETCH_OBJ)) {
	
	echo "<h3>$row->header </h3>";
	echo "<p> Тема: $row->intro</p>";
	echo "<p>Автор статьи:<b><mark> $row->autor </mark></b></p>";
	echo "<a href='article.php?id=$row->id' title='$row->header'
	<button class='btn btn-warning mt-2 mb-2'>Читать</button> </a>";
}
все работает!! он там и не нужен, в мануале написано без параметров в select-запросах. Но я им никогда и не пользовался, если что-то прочитать из бд надо.

Оранжевые штаны
0
php, я привел лишь пример, у меня все на много сложнее устроено, есть публичный метод RUN
// $query = $db->run(запрос для prepare, [параметры bind_param], [переменные для bind_result]);
$id = 4; // например нам нужно вытащить имена первых 3 юзеров
$query = $db->run("SELECT `name` FROM `members` WHERE `id` < ?", ['i', $id], [&$name]);
while($query->fetch()) var_dump($name);
// вася
// петя
// саша
$query->close();
сам метод RUN использует еще пару приватных методов
Изменил: Dmitry Kokorin (23.04.2019 / 22:12)
P

Чатланин
0
Dmitry Kokorin, ну вот я тоже хотел бы разделить на методы, и запускать каждый в зависимости от типа операции.
$query = $db->run("SELECT `name` FROM `members` WHERE `id` < ?", ['i', $id], [&$name]); - тут м.б. проще было бы циклом воспользоваться? Для универсальности. Правда я не вижу контекста, тебе виднее.
Изменил: php (23.04.2019 / 22:58)

Пацак
0
@KpuTuK, да и зачем там execute()???

Вот мой же код: require_once 'db_connect.php';$sql = 'SELECT * FROM articles ORDER BY date DESC';$query = $db->query($sql);while ($row = $query->fetch(PDO:: FETCH_OBJ)) { echo "<h3>$row->header </h3>"; echo "<p> Тема: $row->intro</p>"; echo "<p>Автор статьи:<b><mark> $row->autor </mark></b></p>"; echo "<a href='article.php?id=$row->id' title='$row->header' <button class='btn btn-warning mt-2 mb-2'>Читать</button> </a>";}
все работает!! он там и не нужен, в мануале написано без параметров в select-запросах. Но я им никогда и не пользовался, если что-то прочитать из бд надо.
@php (Сегодня / 21:35)
я написал это исходя из 213 поста
P

Чатланин
0
KpuTuK, я о нем же.

Оранжевые штаны
0
php, не догнал про цикл, куда и зачем?
P

Чатланин
0
Dmitry Kokorin, for (то-то, $X <int, то-то) {
run...} не покатит для твоих целей?
Изменил: php (24.04.2019 / 09:03)
Стикеры / Теги / Правила / Топ тем / Топ постов / Поиск