С Новым годом! Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 25.10.2013
Сообщений: 14

Не работает while после выполнения вложенного if

25.10.2013, 13:58. Показов 1068. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
//Подключаемся к бд
$link = mysqli_connect("localhost","root","","keyword_db") or die("Error " . mysqli_error($link));
//Подключаем файл
$fp = fopen("a.txt", "r");
 
//инициализируем счетчики
$i=1;
$d=10;
 
//Парсим файл
while (!feof($fp))
{
$t=fgets($fp);
 
//Клеим запросы
$sd .="INSERT INTO tbl (rec) VALUES ('{$t}');";
    
       if($i%$d==0)
        {
        $s=mysqli_multi_query($link,$sd);
        $sd = "";
        }
        $i++;
}
fclose($fp);
после выполнения IF в $sd не записываются строки,почему - непонятно.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.10.2013, 13:58
Ответы с готовыми решениями:

Код не работает на всем выделенном диапазоне, а останавливается после первого выполнения
Здравствуйте! Подскажите, пожалуйста, кому это интересно, почему скрипт не работает до конца выделенного диапазона. Макрос должен находить...

Скажите результат после выполнения этой программы, у меня паскаль не работает
Скажите результат после выполнения этой программы, у меня паскаль не работаетprogram B (output); var x,y,z: integer; procedure Q...

Результат выполнения программы в консоли пропадает после выполнения скрипта
нужно отпарсить файл , но мне надо видеть что выводит сценарий , иначе мне его неотладить. Запускаю файл вот так python index.py

14
Заблокирован
25.10.2013, 14:56
10 запросов в мульте это предел?

Добавлено через 19 минут
Короче это г-код. Если вы замечаете как вдруг начинают размножаться мелкие счетчики и всякого такого рода мусор, значит вы неправильно программируете процессор.

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//Парсим файл
$t = array();
while (!feof($fp)) $t[]= '(' . fgets($fp) . ')'; // получается '(x)'
fclose($fp);
 
// запарсили, одно дело сделано, закрыли его, теперь запись
// в этом месте я пошел смотреть какие есть функции для разбивки массивов
// и нашел за сек
 
$d = 10;
$c = array_chunk($t, $d); // теперь у нас в $c - n массивов по $d элементов в каждом или меньше в последнем
 
$qb = "INSERT INTO tbl (rec) VALUES '; // база запроса
 
foreach($c as $arr) {
   $q = $qb . join( ', ', $arr); // получается (x), (y), (r), (e) и тд
   $r = $mysqli->query($q);
}
Понятно? Зачем вообще вам мультик, если вы можете вообще все вставить за раз? Уверен что пока я тут сочинял свой вариант г-кода, вам уже обосновали.
0
0 / 0 / 0
Регистрация: 25.10.2013
Сообщений: 14
25.10.2013, 14:58  [ТС]
Цитата Сообщение от sqlnub Посмотреть сообщение
10 запросов в мульте это предел?
- нет конечно.
Воспользовался вот этой mysqli_next_result(); функцией и заработало.
PS: Надеялся повысить скорость записи в бд но что-то разницы не заметил.
0
Заблокирован
25.10.2013, 14:58
Нет, еще не обосновали. Короче, смотрите сколько вы можете постом отгрузить за раз, обычно там не меньше 2МБ, и оценив размер файла принимайте решение насчет $d.
0
0 / 0 / 0
Регистрация: 25.10.2013
Сообщений: 14
25.10.2013, 15:02  [ТС]
залить надо около 2.500.000.000 записей.

Добавлено через 16 секунд
примерно 45 гб
0
Заблокирован
25.10.2013, 15:04
Ну короче мульт вам тут не нужен. Недавно я постил правильный мультометод, можете в "находках" посмотреть, не должен был далеко уехать. Потому что инсерты работают так:

SQL
1
INSERT INTO tbl (rec) VALUES (v),(v),(v),(v),(v),(v),(v),(v),(v),(v),(v),(v),(v),(v),(v),(v),(v),(v),(v),(v),(v),(v),(v);
Да, делиметер я забыл там воткнуть, в г-коде своем, выше.

Все что вас ограничивает - это размер поста.

Добавлено через 1 минуту
Цитата Сообщение от mey Посмотреть сообщение
залить надо около 2.500.000.000 записей.
Ну вот, уже понятно. И по 10 штук собирались? Найдите в настройках свои ограничения и прикиньте сколько там войдет значений и рубите инсерты пачками.

Тфу, блин, при чем тут пост. Не пост надо смотреть в пхп ини, конечно, надо в майскуле смотреть. Я не смотрел туда ни разу.
1
0 / 0 / 0
Регистрация: 25.10.2013
Сообщений: 14
25.10.2013, 15:05  [ТС]
спасибо за оперативность, буду разбираться.
0
Заблокирован
25.10.2013, 15:13
Вот если вам выборочно придется 2,5М записей удалять, или не дай бог править - вот тогда мульт самое то. А инсерты они сами по себе мульты. Вы же закачивали дамп базы - видели наверно как он устроен.

Добавлено через 57 секунд
Ну да, если объем большой, скрипту может не хватить мемори. Придется рубить чунки в цикле чтения файла. Это смотря что там.

Добавлено через 5 минут
Вот она. Проверка на массив сделана специально ради инсертов, которые приходят одной строкой:

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    public function multi_query($query) {
 
        if (is_array($query)) $multi_query = implode('; ', $query);
        else $multi_query = $query . ';';
        
        $i = 0;
        if (parent::multi_query($multi_query)) {
            do { $i++;
            } while (parent::more_results() && parent::next_result());
        }
        
        if ($this->errno) {
            throw new Exception('Multi Query: ошибка в строке ' . $i . "\n" . '<br />');
        }
        
    }
Добавлено через 1 минуту
Цитата Сообщение от mey Посмотреть сообщение
mysqli_next_result();
Этого может не хватить чтобы сбросить ненужный результ. См. выше.
0
0 / 0 / 0
Регистрация: 25.10.2013
Сообщений: 14
25.10.2013, 15:18  [ТС]
Цитата Сообщение от sqlnub Посмотреть сообщение
Недавно я постил правильный мультометод, можете в "находках" посмотреть, не должен был далеко уехать.
не нашел - ткните носом плиз.
0
Заблокирован
25.10.2013, 15:32
Вот тут целиком класс коннекта с классом опций. Опции конечно надо отдельно в конфиге создавать, который в корне везде пихается.

Обмен готовыми решениями
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
25.10.2013, 15:44
целый класс г.. отличного кода.. Пользуйтесь на здоровье.. Правда, я бы посоветовал ТС-у написать на процедурном коде, нежели использовать такой класс. Уж извините, но это не ООП, а тупо обычный код, засунутый в класс. Возьмите лучше нормальную обертку над PDO/mysqli, коих в инете полно..
0
Заблокирован
25.10.2013, 15:59

Не по теме:

Это они в крайности бросаются, я уже привык.



Проблема в самом API. Это гамно вообще невозможно никак улучшить. Я пытался. Все что осталось от попыток - то вы и видите.

PDO то же самое гамно в другой бумажке.

Добавлено через 2 минуты
Основная фишка там в том, что KOPOJI, любит сильнее всего - в отсутствии необходимости каждый раз проверять результ. Просто пишешь результ равно запросу и знаешь что если не результ, эксепшн выкинет на нот-фаунд, который посмотрит уровень ошибок и, если он не публичный - расскажет в чем я не прав.

Добавлено через 3 минуты
Знаете как улучшить майсклю? Покажите пример. В отдельной теме. А то ковыряние в практическом невежестве уже порядком достало. И обсудим.
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
25.10.2013, 16:18
Опять вранье. Просто это не ООП. Где его плюсы здесь? Свойства открытые - где инкапсуляция? Что за пустые case-ы в switch, нафига они там? Почему данные для подключения устанавливаются где-то внутри метода, а не на основе конфига/полученных данных? Зачем использовать обычную константу, если ее правильнее задать константой класса? Как мне поменять извне уровень отображения ошибок? К чему подавление ошибок перед вызовом конструктора? Почему в конструктор может передаться только один аргумент? И какой в нем смысл? Где в конструкторе класса Link указание, что передаваемый аргумент должен быть объектом, причем именно Connect_Options ? А если я захочу туда передать массив? В чем вообще смысл использования, по сути, пустого класса Connect_Options и в чем его преимущества вместо простого ассоциативного массива? И, собственно, главный вопрос - в чем вообще смысл всего этого, если это тупо переписанный код того же самого? Смена шила на мыло? Обертки пишут для более удобной работы, то, что написали вы - не дает абсолютно никаких удобств по сравнению с использованием встроенного расширения

Добавлено через 8 минут
Цитата Сообщение от sqlnub Посмотреть сообщение
Знаете как улучшить майсклю? Покажите пример
Зачем? MySQLi и так предоставляет нормальный ООП-подход. Переписывать код просто так у меня нет желания, писать обертку под MySQLi не имею ни малейшего желания, т.к. мне больше симпатизирует PDO. Под него я писал простую, но удобную для меня обертку, код есть здесь
0
Заблокирован
25.10.2013, 20:33
Цитата Сообщение от KOPOJI Посмотреть сообщение
А если я захочу туда передать массив?
Вы можете захотеть передать массив куда угодно. Весь вопрос в том, примут ли там его. В общем меня ваши вопросы не расстроили. Такая рефлексия давно мне известна и смысл в том что читатели типа вас не хотят чтобы все становилось проще, яснее и понятнее. Им уютнее среди чудовищных тайн покрытых слоем невежества почитателей гуру. В общем, не важно. Я вот что хотел зайти добавить:

Добавлено через 3 часа 41 минуту

И вообще запутали вы меня, тормоза. Там же написано класс Линк. Все, на этом.

А вот когда там написано как большинства Class BD - я не могу взять в толк: где там вообще БД? Ну что значит BD? Типа загрузили все таблицы, подняли все связи, собрали все списки, обеспечили всех свойствами согласно ранее поднятым из той же блин бд настройками и все такое? Нет, в классах DB чудовище жующие массивы и плюющее запросами само на себя чтобы выдавить изуродованный результ.

Насчет функций. Когда я вижу как народ массово телепортируется через :: я вижу самую обычную функцию которую _инкапсулировали_ чтобы выдать на зохавание автолодеру и пихать туда через ЖЖ всякое барахло.

Нет ничего другого, не придумали еще. Есть только scope, с него все начинается и растет.

Добавлено через 1 минуту
Кстати, эта рефлексия интеллигентов. Видели фильм про Дусю Бурлакову, или как там ее. Либо идеал, либо умри.

Кстати, я пока ничего кроме простейших примеров от вас не видел. Надо бы померяться пиписьками, что ли.

Добавлено через 21 минуту
Цитата Сообщение от KOPOJI Посмотреть сообщение
Под него я писал простую, но удобную для меня обертку, код есть здесь
Понял только что делает квери. Остальное похоже на методы из туторов, типа private function getSum($bonus) {return $bonus+$this->salary;}

Я же написал выше. Все там было. Около 1000 строк кода содержал этот "класс" поначалу. Оказалось этот идиотский подход - идиотский. Нельзя себя самого взять и унасекомить какой-то шнягой ради неизвестно чего. Ну, то есть можно, конечно, но какой в этом смысл?

Какой смысл в этой вашей квери, если все запросы совершенно разные как по содержанию, так и по условиям и структуре и все такое. Одинаковые запросы генерит само ПО по заданным условиям и там не нужны шаблоны в квери, потому что условия слишком далеко передавать. Функция у которой больше 2 аргументов это перебор. Я чуть не ошизел когда писал микрофотошоп на php. Там шопесец эта imageinter... как она там, в общем понятно. Древняя, надежная, процедУра. Не то что халявные имаджики.

Ладно, предлагаю сравнить:

Вот так обидентифицируются имена:

PHP
1
2
3
4
function ticks() {
    if( func_num_args()) return '`' . join('`.`', func_get_args()) . '`';
    else return '';
}

Узнаете почерк?

А вот так получаем всех детей и родителей и их детей в гнездовой модели.


PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
    // ветка вниз от выбранной ноды
    public function getCurrentTree() {
        
        if($this->currID <= 0) return;
        
        $sql = "SELECT node.*, (COUNT(parent.id) - (sub_tree.depth + 1)) AS depth
        FROM {$this->table} AS node, {$this->table} AS parent, {$this->table} AS sub_parent,
            (   SELECT node.*, (COUNT(parent.id) - 1) AS depth
                FROM {$this->table} AS node,
                {$this->table} AS parent
                WHERE node.lft BETWEEN parent.lft AND parent.rgt
                AND node.id = {$this->currID}
                GROUP BY node.id
                ORDER BY node.lft
            ) AS sub_tree
        WHERE node.lft BETWEEN parent.lft AND parent.rgt
            AND node.lft BETWEEN sub_parent.lft AND sub_parent.rgt
            AND sub_parent.id = sub_tree.id
        GROUP BY node.id
        ORDER BY node.lft ASC";
     
        $result = $this->db->query($sql);
        
        if ($this->db->affected_rows == 0) return $this->error(1, true);
        return $result;
    }
Потянет ваша квери такое?

Нужен класс гнездовой модели? Я время от времени ее поднимаю, чего-нить допишу, облизнусь и брошу. Нормально работает, с любыми таблицами. Лишь бы lft, rgt были.

Добавлено через 6 минут
Не вам же одному можно в крайности бросаться.

Добавлено через 16 минут
Цитата Сообщение от KOPOJI Посмотреть сообщение
т.к. мне больше симпатизирует PDO.
В PDO внутри абсолютно все то же самое что в API.

Добавлено через 21 минуту
Из "здесь"

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

Ну конечно, вот для таких специальных людей и такие вот особые абстрактные классы.

Если энтропия запросов растет - значит падает эффективность.

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

Добавлено через 11 минут
А, пустые свитчи. Ну так я ж не могу отпостить авторизацию на все хосты которые в моем ведении. Свитчи это переключатель опций подключения, там их штук 8 пока что. Пустые - в качестве примера, что можно засунуть еще. Или наоборот все выкинуть и заливать в стек снаружи.
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
25.10.2013, 20:53
Цитата Сообщение от sqlnub Посмотреть сообщение
Потянет ваша квери такое?
это лишь часть файла. Для любителей подобных запросов есть "findBySQL" и иже с ним.
Цитата Сообщение от sqlnub Посмотреть сообщение
В PDO внутри абсолютно все то же самое что в API.
в каком именно API? MySQL ? Да там даже плэйсхолдеры хоть и поддерживаются, но назвать их полноценными язык не поворачивается. А в MySQLi что, намного лучше? Налепи кучу знаков вопросов в запросе, а потом гадай, где и какой, главное, смотри, не ошибись, не перепутай - отличные подготовленные выражения, удобные.. Вот вы выше привели запрос. Что будет, если вам надо будет эти переменные подставить не напрямую? Отвечу за вас: вам придется пять раз подряд продублировать переменную только потому, что нельзя использовать именованные параметры. Обалденно
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
25.10.2013, 20:53
Помогаю со студенческими работами здесь

Z-index не работает для вложенного элемента относительно родительского
Здравствуйте, опишу проблему, допустим имеется простая компоновка: &lt;div style=&quot;width:100%; height:50px; background: red;...

Теория. Почему в данном случае copy() не работает после reserve(), но работает после resize()?
Есть такая функция: void Array::SetStartIndexes(sz3_Arr_t *array) { start_index.reserve(array-&gt;size()); ...

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

Закрытие после выполнения
Как сделать, чтобы после выполнения определенных действий и закрытия окна opengl, консоль не закрывалась, а продолжала работать?

Почему после выполнения программы х = 10?
Всем привет, если кто может, пожалуйста объясните почему после выполнения программы х = 10. Спасибо заранее. program a1; procedure...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru