Возможно ли инстанцирование множества объектов через PDO::fetch_obj? Возможно мысль сформулирована не очень четко, постараюсь объяснить по подробнее. Сейчас у меня есть некий класс(описан ниже) и класс базы данных, заточенный под mysqli, функции обернуты посредством ооп и абстрагированы названия. Суть заключается в следующем: В классе Database_object есть три метода: find_by_sql(), find_by_id, find_all(); Два последующий построены на предыдущем. И в данный момент когда мне нужно инстанцировать экземпляр класса, который отнаследован от Database_object. Я это делаю при помощи этих 3 методов. Например Products::find_all() - вернет объектами все записи из таблицы products, и как не сложно догадаться, 2 остальных работают подобным образом. Так вот, хочу переписать их с использованием PDO. Но прежде, чем это делать Интересует, нужно ли вообще это делать. Ибо в PDO есть метод fetch, который в купе с константой fetch_obj возвращает экземпляр std класса, а если пошаманить, то и экземпляр вызываемого класса, но он возвращает только один объект, как find_by_id(); Возможно есть вариант, который сможет вернуть все объекты сразу, как это делает find_all();query("SHOW COLUMNS FROM ".static::$table_name); while ($row = $db->fetch_assoc($result)){static::$db_fields[]=$row['Field'];} }
public static function find_by_sql($sql){ global $db; static::$db_fields = static::table_fields(); $result = $db->query($sql); $object_array = []; while ($row = $db->fetch_assoc($result)){ $object_array[] = static::instantiate($row); } return !empty($object_array) ? $object_array : false; }
public static function find_by_sql_shift($sql=""){ $result_array = static::find_by_sql($sql); return !empty($result_array) ? array_shift($result_array) : false; } public static function find_by_id($id=0){
$result_array = static::find_by_sql("SELECT * FROM ".static::$table_name." WHERE ".static::$table_name."_id = {$id} LIMIT 1 "); return !empty($result_array) ? array_shift($result_array) : false; }
public static function find_all(){
return static::find_by_sql("SELECT * FROM ".static::$table_name); }
private static function instantiate($record){
$class_name = get_called_class(); $object = new $class_name; foreach($record as $attribute=>$value){
Да, возможно инстанцирование множества объектов через PDO::fetch_obj. Однако, для этого нужно немного модифицировать ваш класс Database_object и методы для работы с PDO.
Вместо использования методов find_by_sql(), find_by_id() и find_all(), вы можете создать новый метод, который будет использовать PDO и fetch_obj для получения списка объектов:
public static function find_all_pdo(){ global $pdo; $stmt = $pdo->prepare("SELECT * FROM ".static::$table_name); $stmt->execute(); $object_array = []; while ($row = $stmt->fetch(PDO::FETCH_OBJ)) { $object_array[] = static::instantiate((array) $row); } return !empty($object_array) ? $object_array : false; }
Теперь вы можете использовать этот метод для получения всех объектов из таблицы с помощью PDO:
$products = Products::find_all_pdo();
Этот подход позволит вам использовать PDO и fetch_obj для инстанцирования множества объектов вашего класса. Не забудьте настроить подключение к базе данных через PDO в вашем классе Database_object.
Да, возможно инстанцирование множества объектов через PDO::fetch_obj. Однако, для этого нужно немного модифицировать ваш класс Database_object и методы для работы с PDO.
Вместо использования методов find_by_sql(), find_by_id() и find_all(), вы можете создать новый метод, который будет использовать PDO и fetch_obj для получения списка объектов:
public static function find_all_pdo(){global $pdo;
$stmt = $pdo->prepare("SELECT * FROM ".static::$table_name);
$stmt->execute();
$object_array = [];
while ($row = $stmt->fetch(PDO::FETCH_OBJ)) {
$object_array[] = static::instantiate((array) $row);
}
return !empty($object_array) ? $object_array : false;
}
Теперь вы можете использовать этот метод для получения всех объектов из таблицы с помощью PDO:
$products = Products::find_all_pdo();Этот подход позволит вам использовать PDO и fetch_obj для инстанцирования множества объектов вашего класса. Не забудьте настроить подключение к базе данных через PDO в вашем классе Database_object.