Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Помогите с DB wrapper-ом

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Никак не могу разобраться, почему не удаеться получить массив в запросе.
berna911
Отправлено: 07 Июля, 2017 - 16:28:21
Post Id


Новичок


Покинул форум
Сообщений всего: 7
Дата рег-ции: Июль 2017  


Помог: 0 раз(а)




Дело стоит так. Решыл накатать соц.сеть для общение между друзьями и т.к. обожаю работать с MVC, решыл разработать сайт именно на MVC. Для того, чтоб было легче работать с БД, накатал wrapper()оболочку. Вот код:

<?php
class DB{
private $_mysqli,
$_query,
$_results = array(),
$_count = 0;

public static $instance;

public static function getInstance()
{
if( !isset( self :: $instance ) )
{
self :: $instance = new DB();
}
return self :: $instance;
}

public function __construct()
{
$this -> _mysqli = new mysqli('localhost', 'cool_net', 'wormixnik911', 'cool_net');
if( $this -> _mysqli -> connect_error )
{
die( $this -> mysqli -> mysqli_connect_error );
}
}

public function query($sql)
{
if( $this -> _query = $this -> _mysqli -> query($sql) )
{
while( $row = $this -> _query -> fetch_object() )
{
$this -> _results[] = $row;
}
$this -> _count = $this -> _query -> num_rows;
}
return $this;
}

public function results()
{
return $this -> _results;
}

public function count()
{
return $this -> _count;
}

}
?>

В принципе работает хорошо, но когда в одном файле делаеться несколько запросов, то начинает быть проблематичной. Вот код модели в которой собственно и есть проблемы(жирным я виделил, тот кусок кода, который не может никак начать правильно работать):

<?php
class Model_my_page extends Model
{
public function get_data()
{

$data = array();
$user = array();
$users_sr = array();
$users_high = array();
$users_career = array();
$users_war = array();
$user_fr_single;
$user_fr = array();
$user_fr_main;

$user_wall_date;
$user_wall_author;
$user_wall_date;
$user_wall_likes;

$users = DB::getInstance() -> query('SELECT * FROM us_main WHERE id = 3');
foreach ($users -> results() as $user);

$user_sr = DB::getInstance() -> query('SELECT * FROM us_srObr WHERE user_id = '.$user -> id);
foreach ($user_sr -> results() as $users_sr);

$user_high = DB::getInstance() -> query('SELECT * FROM us_highObr WHERE user_id = '.$user -> id);
foreach ($user_high -> results() as $users_high);

$user_career = DB::getInstance() -> query('SELECT * FROM us_career WHERE user_id = '.$user -> id);
foreach ($user_career -> results() as $users_career);

$user_war = DB::getInstance() -> query('SELECT * FROM us_war WHERE user_id = '.$user -> id);
foreach ($user_war -> results() as $users_war);

$user_friends = DB::getInstance() -> query('SELECT rel_friends FROM us_main WHERE id=3');
foreach ($user_friends -> results() as $friends) {
$user_fr_single = $friends -> rel_friends;
}

$counter = DB::getInstance() -> query('SELECT * FROM us_posts WHERE author = 3') -> count();
$user_wall = DB::getInstance() -> query('SELECT * FROM us_posts WHERE author = 3');

for($i = 0; $i < $counter; $i++)
{
foreach ($user_wall -> results() as $walls)
{
$user_walls[$i]['date'] = $walls -> date;
$user_walls[$i]['author'] = $walls -> author;
$user_walls[$i]['text'] = $walls -> text;
$user_walls[$i]['likes'] = $walls -> likes;
$ounter++;
}
}



$data = array(
'id' => $user -> id,
'sys_email' => $user -> sys_email,
'sys_telephone' => $user -> sys_telephone,
'sys_link' => $user -> sys_link,
'sys_avatar' => $user -> sys_avatar,
'main_status' => $user -> main_status,
'main_name' => $user -> main_name,
'main_lastName' => $user -> main_lastName,
'main_sex' => $user -> main_sex,
'main_relationship' => $user -> main_relationship,
'main_birthdate' => $user -> main_birthdate,
'main_city' => $user -> main_city,
'main_languages' => $user -> main_languages,
'main_grandfamily' => $user -> main_grandfamily,
'main_family' => $user -> main_family,
'main_brSys' => $user -> main_brSys,
'main_childs' => $user -> main_childs,
'main_grandchilds' => $user -> main_grandchilds,
'main_birthdayShow' => $user -> main_birthdayShow,
'cont_country' => $user -> cont_country,
'cont_city' => $user -> cont_city,
'cont_rayon' => $user -> cont_rayon,
'cont_metro' => $user -> cont_metro,
'cont_street' => $user -> cont_street,
'cont_name' => $user -> cont_name,
'cont_telephone' => $user -> cont_telephone,
'cont_secondTelephone' => $user -> cont_secondTelephone,
'cont_skype' => $user -> cont_skype,
'cont_sait' => $user -> cont_sait,
'int_deatel' => $user -> int_deatel,
'int_interest' => $user -> int_interest,
'int_music' => $user -> int_music,
'int_films' => $user -> int_films,
'int_teleshow' => $user -> int_teleshow,
'int_books' => $user -> int_books,
'int_games' => $user -> int_games,
'int_citats' => $user -> int_citats,
'int_about' => $user -> int_about,
'lifePos_politic' => $user -> lifePos_politic,
'lifePos_world' => $user -> lifePos_world,
'lifePos_life' => $user -> lifePos_life,
'lifePos_people' => $user -> lifePos_people,
'lifePos_smoke' => $user -> lifePos_smoke,
'lifePos_alco' => $user -> lifePos_alco,
'lifePos_vdoh' => $user -> lifePos_vdoh,
'sr_country' => $users_sr -> sr_country,
'sr_school' => $users_sr -> sr_school,
'sr_start' => $users_sr -> sr_start,
'sr_end' => $users_sr -> sr_end,
'sr_date' => $users_sr -> sr_date,
'sr_class' => $users_sr -> sr_class,
'sr_specialization' => $users_sr -> sr_specialization,
'high_country' => $users_high -> high_country,
'high_city' => $users_high -> high_city,
'high_vuz' => $users_high -> high_vuz,
'high_fakultet' => $users_high -> high_fakultet,
'high_study_form' => $users_high -> high_study_form,
'high_status' => $users_high -> high_status,
'high_date' => $users_high -> high_date,
'car_jobPlace' => $users_career -> car_jobPlace,
'car_start' => $users_career -> car_start,
'car_end' => $users_career -> car_end,
'car_country' => $users_career -> car_country,
'car_dol' => $users_career -> car_dol,
'war_country' => $users_war -> war_country,
'war_chast' => $users_war -> war_chast,
'war_start' => $users_war -> war_start,
'war_end' => $users_war -> war_end,
'user_friends_name' => array(),
'user_friends_avatar' => array(),
'user_friends_count' => 0,
'user_wall_author' => array(),
'user_wall_date' => array(),
'user_wall_text' => array(),
'user_wall_likes' => array(),
'user_wall_count' => $counter
);

for($i = 0; $i < $counter; $i++)
{
$data['user_wall_author'][$i] = $user_walls[$i]['author'];
$data['user_wall_date'][$i] = $user_walls[$i]['date'];
$data['user_wall_text'][$i] = $user_walls[$i]['text'];
$data['user_wall_likes'][$i] = $user_walls[$i]['likes'];
}

$user_fr = explode(";", $user_fr_single);

$data['user_friends_count'] = count($user_fr);

for($i = 0; $i < count($user_fr) - 1; $i++)
{
$user_fr_main[$i] = DB::getInstance() -> query('SELECT main_name,sys_avatar FROM us_main WHERE id='.$user_fr[$i]);
foreach ($user_fr_main[$i] -> results() as $user_fr_mainn) {
$data['user_friends_name'][$i] = $user_fr_mainn -> main_name;
$data['user_friends_avatar'][$i] = $user_fr_mainn -> sys_avatar;
}
}



return $data;
}
}
?>

Собственно, я делал похожый запрос к БД, в котором все отлично работает(пробывал даже скопировать этот запрос на страницу в которой у меня проблемы, то даже рабочий код, перестает там работать):
<?php
class Model_friends_search extends Model
{
public function get_data()
{

$people = DB::getInstance() -> query('SELECT id, main_status, main_name, main_lastName, sys_avatar FROM us_main') -> results();
$counter = DB::getInstance() -> query('SELECT id FROM us_main') -> count();


$data = array(
'name' => array(),
'lastName' => array(),
'avatar' => array(),
'status' => array(),
'counter' => $counter
);
for($i = 0; $i < $counter; $i++)
{
$data['id'][$i] = $people[$i] -> id;
$data['name'][$i] = $people[$i] -> main_name;
$data['lastName'][$i] = $people[$i] -> main_lastName;
$data['avatar'][$i] = $people[$i] -> sys_avatar;
$data['status'][$i] = $people[$i] -> main_status;
}

return $data;
}
}
?>

Собственно проблема в том, что мне нужно получить несколько Авторов, Дат, Текстов и Лайков, а код, который помечен жырным, вытягивает мне последнюю запись и пихает во все элементы массива.

Помогите, кто может, а то уже неделю колупаю этот код.
 
 Top
andrewkard
Отправлено: 07 Июля, 2017 - 16:46:31
Post Id


Участник


Покинул форум
Сообщений всего: 1372
Дата рег-ции: Нояб. 2014  


Помог: 30 раз(а)




Цитата:
for($i = 0; $i < $counter; $i++)
{
foreach ($user_wall -> results() as $walls)
{
$user_walls[$i]['date'] = $walls -> date;
$user_walls[$i]['author'] = $walls -> author;
$user_walls[$i]['text'] = $walls -> text;
$user_walls[$i]['likes'] = $walls -> likes;
$ounter++;
}
}


может так?

PHP:
скопировать код в буфер обмена
  1.  
  2. foreach ($user_wall -> results() as $i => $walls)
  3. {
  4. $user_walls[$i]['date'] = $walls -> date;
  5. $user_walls[$i]['author'] = $walls -> author;
  6. $user_walls[$i]['text'] = $walls -> text;
  7. $user_walls[$i]['likes'] = $walls -> likes;
  8. //$ounter++;
  9. }
  10.  
 
 Top
berna911
Отправлено: 07 Июля, 2017 - 16:51:41
Post Id


Новичок


Покинул форум
Сообщений всего: 7
Дата рег-ции: Июль 2017  


Помог: 0 раз(а)




Увы, но нет. Так даже одной записи не находит. Тупо пусто и все.
 
 Top
berna911
Отправлено: 07 Июля, 2017 - 20:37:06
Post Id


Новичок


Покинул форум
Сообщений всего: 7
Дата рег-ции: Июль 2017  


Помог: 0 раз(а)




Ваще, судя по логике, нужно писать так:
foreach ($user_wall -> results() as $walls)
{
$user_walls[$i]['date'] = $walls[$i] -> date;
$user_walls[$i]['author'] = $walls[$i] -> author;
$user_walls[$i]['text'] = $walls[$i] -> text;
$user_walls[$i]['likes'] = $walls[$i] -> likes;
}
Но опять же в результате, я получаю пустые строки. [$i] убираю, получаю только последнюю запись. Суть вопроса в том, почему я не могу получить все записи, вить по точно такому-же алгоритму, в другом файле я все получил, а тут ни в какую.
 
 Top
Sail
Отправлено: 07 Июля, 2017 - 22:44:29
Post Id



Участник


Покинул форум
Сообщений всего: 1131
Дата рег-ции: Февр. 2014  


Помог: 57 раз(а)




berna911, вот для того, "который помечен жырным":
PHP:
скопировать код в буфер обмена
  1. $user_wall = DB::getInstance() -> query('SELECT * FROM us_posts WHERE author = 3');
  2. $user_walls = [];
  3. foreach ($user_wall -> results() as $walls) {
  4.     $arr = [];
  5.     $arr['date'] = $walls->date;
  6.     $arr['author'] = $walls->author;
  7.     $arr['text'] = $walls->text;
  8.     $arr['likes'] = $walls->likes;
  9.     $user_walls[] = $arr;
  10. }

И внимательнее к именам используемых переменных...
Ну и... Впрочем, начинать надо со школьных учебников про алгоритмы. Улыбка

(Отредактировано автором: 07 Июля, 2017 - 22:45:09)

 
 Top
berna911
Отправлено: 08 Июля, 2017 - 00:53:46
Post Id


Новичок


Покинул форум
Сообщений всего: 7
Дата рег-ции: Июль 2017  


Помог: 0 раз(а)




Sail, не хочу тебя расстраивать, но тебе не получилось убить во мне прогера))
В результате опять-же пустые строки. Может кто-нить кинет еще совет?
И еще, а что ты иммел ввиду, когда писал:"И внимательнее к именам используемых переменных...". Вроде у меня все переменные правильно названы. И на всякий, чтоб никто не путалься: я уверен, что проблема не стоит в названии переменных, потому-что когда я вставлял на этот участок кода аналогичный, рабочий в другом файле код, то в этом файле он переставал работать. И сразу кину в догоночку, что проблема состоит в том, что у меня в результате никак не удаеться получить несколько записей и думаю я, что эта проблема возникает из-за конфликта при вызове DB::getInstance(), но где и ваще почему, этого я понять ваще никак не могу. У меня прост с этим кодом были похожые проблемы:

for($i = 0; $i < count($user_fr) - 1; $i++)
{
$user_fr_main[$i] = DB::getInstance() -> query('SELECT main_name,sys_avatar FROM us_main WHERE id='.$user_fr[$i]);
foreach ($user_fr_main[$i] -> results() as $user_fr_mainn) {
$data['user_friends_name'][$i] = $user_fr_mainn -> main_name;
$data['user_friends_avatar'][$i] = $user_fr_mainn -> sys_avatar;
}
}

Но я решыл засунуть результат работы каждого запроса в отдельный елемент массива, а тут чет уперлось и не хочет ничего возвращать.
(Добавление)
Если, кто-нить захочет напечатать так:

for($i = 0; $i < $counter; $i++)
{
$user_walls[$i]['date'] = $user_wall -> results()[$i] -> date;
$user_walls[$i]['author'] = $user_wall -> results()[$i] -> author;
$user_walls[$i]['text'] = $user_wall -> results()[$i] -> text;
$user_walls[$i]['likes'] = $user_wall -> results()[$i] -> likes;
}

то зря. Тоже пустые строки.
P.S. Это чтоб зря не печатали.
(Добавление)
Ооо, ребят, а есть какой-нить вариант написать что-то типа:

$counterr = 0;
foreach ($user_wall -> results() as $walls)
{
$user_walls[$counterr]['date'] = $walls -> date;
$user_walls[$counterr]['author'] = $walls -> author;
$user_walls[$counterr]['text'] = $walls -> text;
$user_walls[$counterr]['likes'] = $walls -> likes;

$counterr ++;
}

(Отредактировано автором: 08 Июля, 2017 - 01:11:12)

 
 Top
berna911
Отправлено: 08 Июля, 2017 - 15:13:41
Post Id


Новичок


Покинул форум
Сообщений всего: 7
Дата рег-ции: Июль 2017  


Помог: 0 раз(а)




Короч, ребят, не дай Бог кому-нить столкнуться с проблемой подобного рода, потому-что это рили маразм. Но я это порешал Хорошо

Короч, когда я создаю новый объект DB::getInstance, алгоритм, дописывает в раньше созданный объект новую информацию, тоесть у меня данные с таблицы us_posts были аж у 6-ом и 7-ом елементе массива. Если короче, то решение этой задачи было таким:

1.) Строки for($i = 0; $i < $counter; $i++)
{
foreach ($user_wall -> results() as $walls)
{
$user_walls[$i]['date'] = $walls -> date;
$user_walls[$i]['author'] = $walls -> author;
$user_walls[$i]['text'] = $walls -> text;
$user_walls[$i]['likes'] = $walls -> likes;
$ounter++;
}
}

Я удалил, потому-что нет смысла инфу дважды запихать по разным массивам;

2.)Строки: for($i = 0; $i < $counter; $i++)
{
$data['user_wall_author'][$i] = $user_walls[$i]['author'];
$data['user_wall_date'][$i] = $user_walls[$i]['date'];
$data['user_wall_text'][$i] = $user_walls[$i]['text'];
$data['user_wall_likes'][$i] = $user_walls[$i]['likes'];
}
Я заменил на: $counterr = 6;
for($i = 0; $i < $counter; $i++)
{
$data['user_wall_author'][$i] = $user_wall[$counterr] -> author;
$data['user_wall_date'][$i] = $user_wall[$counterr] -> date;
$data['user_wall_text'][$i] = $user_wall[$counterr] -> text;
$data['user_wall_likes'][$i] = $user_wall[$counterr] -> likes;
$counterr ++;
}
Тоесть, переменная $counterr сразу-же приравняеться к 6-ти, т.к. записи с таблицы us_posts начинаються с 6-го елемента массива объектов $user_wall.
Короч вот такая вот необычная фигня, с которой я колупалься уже неделю.

P.S. Всем кто пыталься мне помочь большая благодарность. И еще(может кому интерестно каким боком я ваще узнал, что с классом DB твориться такая фигня). Все елементарно, зашел у вьюшку, и в начале файла накатал:
<?php

$DB = new DB();

echo "<pre style='color: #fff;'>", print_r($DB -> getInstance() -> query('SELECT * FROM us_posts WHERE author = 3') -> results()), "</pre>";
?>

Так как вьюшка и модель это одно целое, то естественно мне вывело все, что хранилось в классе DB, с которым я работал в модельке. Результат мне вывелься вот такого вида:

Array
(
[0] => stdClass Object
(
[id] => 3
[sys_email] => b.xack@mail.ru
[sys_telephone] => 380918023071
[sys_link] => csm
[sys_avatar] => header.jpg
[main_status] => Yo bich motherfuckааааааа
[main_name] => max
[main_lastName] => Berna
[main_sex] => M
[main_relationship] => Помолвлен
[main_birthdate] => 2017-06-14
[main_city] => Rado
[main_languages] => Ukr
[main_grandfamily] => Bab
[main_family] => Pap
[main_brSys] => Sys
[main_childs] => Ch
[main_grandchilds] => GChi
[main_birthdayShow] => Показувати тількі місяць та день
[cont_country] => Ukr
[cont_city] => Zhit
[cont_rayon] => Bogun
[cont_metro] => Met
[cont_street] => Kot
[cont_name] => Zt
[cont_telephone] => 380973503137
[cont_secondTelephone] => 380918023071
[cont_skype] => berna9111
[cont_sait] => https://cn[dot]net
[int_deatel] => Programmer
[int_interest] => Programming
[int_music] => Dance
[int_films] => Fightings
[int_teleshow] => No
[int_books] => About programming
[int_games] => Logic
[int_citats] => It's good
[int_about] => Cool guy
[lifePos_politic] => Умеренные
[lifePos_world] => Poh
[lifePos_life] => Карьера и деньги
[lifePos_people] => Власть и богатство
[lifePos_smoke] => Компромиссное
[lifePos_alco] => Негативное
[lifePos_vdoh] => Played
[rel_friends] => 5;4;
)

[1] => stdClass Object
(
[id] => 2
[user_id] => 3
[sr_country] => fewfwe
[sr_school] => fewfwe
[sr_start] => 2311
[sr_end] => 2133
[sr_date] => 2311
[sr_class] => 1
[sr_specialization] => fwefwe
)

[2] => stdClass Object
(
[user_id] => 3
[high_country] => Ukr
[high_city] => Zhit
[high_vuz] => ZTK
[high_fakultet] => Programming
[study_form] => Дистанционная
[high_status] => Student
[high_date] => 2017
)

[3] => stdClass Object
(
[user_id] => 3
[car_jobPlace] => Mvc
[car_start] => 2012
[car_end] => 2015
[car_country] => Ukr
[car_dol] => Front-end
)

[4] => stdClass Object
(
[user_id] => 3
[war_country] => Ukr
[war_chast] => ffewfgwe
[war_start] => 2311
[war_end] => 2314
)

[5] => stdClass Object
(
[rel_friends] => 5;4;
)

[6] => stdClass Object
(
[id] => 1
[author] => 3
[date] => 2017-07-02
[text] => Всім привіт - це мій перший пост.
[likes] => 0
)

[7] => stdClass Object
(
[id] => 3
[author] => 3
[date] => 2017-07-07
[text] => Це мій другий пост
[likes] => 0
)

[8] => stdClass Object
(
[id] => 1
[author] => 3
[date] => 2017-07-02
[text] => Всім привіт - це мій перший пост.
[likes] => 0
)

[9] => stdClass Object
(
[id] => 3
[author] => 3
[date] => 2017-07-07
[text] => Це мій другий пост
[likes] => 0
)


[10] => stdClass Object
(
[main_name] => Вован
[sys_avatar] => vovanich.png
)

[11] => stdClass Object
(
[main_name] => Денис
[sys_avatar] => denia.png
)

[12] => stdClass Object
(
[id] => 1
[author] => 3
[date] => 2017-07-02
[text] => Всім привіт - це мій перший пост.
[likes] => 0
)

[13] => stdClass Object
(
[id] => 3
[author] => 3
[date] => 2017-07-07
[text] => Це мій другий пост
[likes] => 0
)

)

И сразу стало понятно, где и что храниться.

Всем удачи, счастливого кодинга и чтоб не попадали в такие тупые ситуации как я! Хм
 
 Top
Мелкий Супермодератор
Отправлено: 08 Июля, 2017 - 15:33:43
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Сначала дёргать fetch_object, затем мужественно от избавляться от stdobject.
Сначала пихать все результаты в один список, затем мужественно думать, почему там стало больше данных.
Что у mysqli, что у pdo результат запроса очень даже не случайно отделён от выполнения запросов.

PHP:
скопировать код в буфер обмена
  1. $user_wall = DB::getInstance() -> query('SELECT * FROM us_posts WHERE author = 3');
  2. for($i = 0; $i < $counter; $i++)
  3.  {
  4.  foreach ($user_wall -> results() as $walls)
  5.  {
  6.  $user_walls[$i]['date'] = $walls -> date;
  7.  $user_walls[$i]['author'] = $walls -> author;
  8.  $user_walls[$i]['text'] = $walls -> text;
  9.  $user_walls[$i]['likes'] = $walls -> likes;
  10.  $ounter++;
  11.  }
  12.  }

=>
PHP:
скопировать код в буфер обмена
  1. $user_walls = $mysqli -> query('SELECT date, author, text, likes FROM us_posts WHERE author = 3')->fetchAll(MYSQLI_ASSOC);

Всё! Одна (!) строка, идентичное поведение.
А не, не идентичное. Что вы вообще в этом куске пытались сделать?!

PHP:
скопировать код в буфер обмена
  1. public function query($sql)
  2.  {
  3.  if( $this -> _query = $this -> _mysqli -> query($sql) )
  4.  {
  5.  while( $row = $this -> _query -> fetch_object() )
  6.  {
  7.  $this -> _results[] = $row;
  8.  }
  9.  $this -> _count = $this -> _query -> num_rows;
  10.  }
  11.  return $this;
  12.  }

Читаем внимательно. Если не помогло, то читаем очень внимательно.
Что происходит при выполнении второго запроса? Третьего? Последующих?
Ключевое слово - side effects.

berna911 пишет:
[rel_friends] => 5;4;

Вот отчего я не сомневаюсь, что если строк в табличке случайно станет не 5, а хотя бы смешных 50к придёте с вопросом, а что же у вас like '%%' тормозит.

berna911 пишет:
$counter = DB::getInstance() -> query('SELECT id FROM us_main') -> count();

Подумайте на досуге, ЧТО делает эта строчка. И почему за такое безобразие вам надают на ревью по рукам и будут правы.

berna911 пишет:
$users = DB::getInstance() -> query('SELECT * FROM us_main WHERE id = 3');
foreach ($users -> results() as $user);

Та вы просто издеваетесь, да?


-----
PostgreSQL DBA
 
 Top
berna911
Отправлено: 08 Июля, 2017 - 15:57:26
Post Id


Новичок


Покинул форум
Сообщений всего: 7
Дата рег-ции: Июль 2017  


Помог: 0 раз(а)




Мелкий, согласен с тобой, у меня сейчас нифига не чистый код и далеко нельзя его назвать правильным, но я же его и не оставлял-бы в таком виде, оптимизация запросов, и остальные фишки я етественно поделаю, единственная проблема в том, что я не понимал, что у меня весь результат записываеться в один список. Это у меня первый wrapper и этот я нашел по ссылке https://www[dot]youtube[dot]com/watch?v=c_bguDh3JXw . Насчет [quote=Мелкий]Что у mysqli, что у pdo результат запроса очень даже не случайно отделён от выполнения запросов.[/quote]
Можежно подробней пжлст?
[quote=Мелкий] Всё! Одна (!) строка, идентичное поведение.
А не, не идентичное. Что вы вообще в этом куске пытались сделать?![/quote]
Тогда смысл, мне было писать wrapper ваще, вить я его создавал с учетом, что в дальнейшем я буду добавлять в него средства защиты, с таким успехом я мог-бы и тупо юзать mysqli и мучаться с wrapper-ом.
[quote=Мелкий]Вот отчего я не сомневаюсь, что если строк в табличке случайно станет не 5, а хотя бы смешных 50к придёте с вопросом, а что же у вас like '%%' тормозит.[/quote]
И вот тут если можешь, подробней, я просто с оптимизацией запросов не очень знаком(кроме приколов типа JOIN), так-что может ты меня подстрахуешь.
[quote=Мелкий][/quote]
Тут я понимаю, что она делает, я просто мучалься с этим гребанным массивом, поэтому накатал получения количества записей как нибудь. Прости если я тебе напряг глаза этой и подобными строками.
Мелкий пишет:
berna911 пишет:
$users = DB::getInstance() -> query('SELECT * FROM us_main WHERE id = 3');
foreach ($users -> results() as $user);

Та вы просто издеваетесь, да?


Тут тебе очередной спасибос и правда запихать всю эту дрян таким макаром запихать не варик. Исправлюсь.
 
 Top
Мелкий Супермодератор
Отправлено: 08 Июля, 2017 - 16:45:40
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




berna911 пишет:
Мелкий пишет:
Что у mysqli, что у pdo результат запроса очень даже не случайно отделён от выполнения запросов.

Можежно подробней пжлст?

mysqli->query возвращает не самого себя, а упаковывает все сведения о выполненном запросе в отдельный объект класса mysqli_result
Аналогично себя ведёт PDO, для результата запроса отдельный объект. Кстати, выпиленный mysql_* ведёт себя аналогично, с той лишь разницей, что вместо объектов оперирует ресурсами.
И это хорошо. Код класса, выполняющего запросы, становится сильно проще, а объект результата получает иммутабельность - его не изменяют прочие выполняемые запросы.

berna911 пишет:
Тогда смысл, мне было писать wrapper ваще

Вообще не представляю.
Хотя для mysqli есть резон сделать обёртку, чтобы заменить api prepared statements на что-то внятное. Помнится, несколько неудобная по жизни штука.
Ну и синглтон для небольших приложений всё равно удобен. У вас, впрочем, реализован неверно. Синглтон не может иметь публичный конструктор и сам инстанс тоже публичным быть не должен.

berna911 пишет:
средства защиты

Чего от чего?
Драйвер даёт prepared statements. Это всё, что требуется от слоя связи с базой.
Где-то... Ага, вот тут у меня сочиненьице неплохое получилось. Вся остальная валидация - задача прикладного кода, проверить, что данные пришли, данные нас устраивают.
Слой базы должен только гарантировать их корректное сохранение и чтение обратно.

berna911 пишет:
И вот тут если можешь, подробней, я просто с оптимизацией запросов не очень знаком(кроме приколов типа JOIN), так-что может ты меня подстрахуешь.

Нынче я постгресовый дба, но и по mysql фокусы тоже кое-какие помню умею.
В целом - сначала делается нормальная схема базы. Потом денормализуется при необходимости.


-----
PostgreSQL DBA
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Объектно-ориентированное программирование »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB