Sitego, всё равно не понимаю, зачем цикл, если max() всё равно возвращает одно значение... Ну да ладно, выше Димон предложил альтернативу - отсортировать значения в таблице, и выбрать первое (или последнее, в зависимости от сортировки).
# Sitego (20.09.2018 / 22:50)
И как это всё сделать? Пример можно, чтобы цикл прошёлся по всем существующим строкам таблицы?
SELECT id FROM users ORDER BY id DESC LIMIT 1;
Этот запрос вернёт последний id пользователя.
ДоХтор, собственно, что твоим запросом, что моим запросом SELECT MAX(`user_id`) AS `max` FROM, получаем одну и ту же циферку в результате, сколько всего id.
Вопрос был не в том, как получить последний id в таблице, это без разницы в обоих запросах, и в твоём и моём, а вопрос в том, как уменьшить нагрузку, для более оптимального выполнения скрипта при прохождении большого количества строк в таблице.
# Sitego (20.09.2018 / 23:03)
ДоХтор, собственно, что твоим запросом, что моим запросом SELECT MAX(`user_id`) AS `max` FROM, получаем одну и ту же циферку в результате, сколько всего id.
Вопрос был не в том, как получить последн
А откуда берётся это большое количество строк? Явно же не из этого кода, который ты приводишь в первом посту, т.к. он возвращает только одно значение.
Добавлено: 20.09.2018 / 23:15
ДоХтор, я же написал, что цикл выполняется. Скрипт проходится по всем пользователям и проверяет определённое поле на определённое значение, если условие совпадает, то скрипт выполняет замену значения других полей у пользователя и идёт дальше по строкам, пока не пройдёт все id.
Добавлено: 20.09.2018 / 23:19
Вот пример с твоим запросом на последний id
$row = $db->super_query( "SELECT `user_id` FROM " . USERPREFIX . "_users ORDER BY `user_id` DESC LIMIT 1" );
for ($i = 1; $i <= $row['user_id']; $i++){
$res = $db->super_query( " SELECT * FROM " . USERPREFIX . "_users WHERE user_id = '".$i."' ");
$res['поле'] бла-бла-бла //скрипт
}
Добавлено: 20.09.2018 / 23:29
Тоже один запрос на update и условие тоже запрос
Добавлено: 20.09.2018 / 23:29
Просто примеров вагон на со. Я с тела. Если не горит. Утром
Добавлено: 21.09.2018 / 00:20
На логическом уровне я понимаю, что мне сначала нужно получить все id строк, где есть определённое значение и потом уже для этих id в определённые поля вставить новые данные. Тогда циклу не нужно будет проходить по всем строкам таблицы. Это сократит и время выполнения скрипта и нагрузку. Но как это реализовать, не могу сообразить.
Добавлено: 21.09.2018 / 03:38
А ларчик просто открывался) Нужно было просто заглянуть в документацию по API движка. Там, оказывается, есть функция как раз для моих целей.
В принципе, то, что я и сам логически думал, что не нужно обрабатывать всю огромную базу данных, а выбрать только те строки, которые мне нужны и только потом уже, их в цикле обработать. Теперь всё выполняется за доли секунды и без нагрузки, а при моём первом варианте процессор сервера под 100% на пару секунд гГ.
Так что иногда полезно потратить время на чтиво документации. Но хотелось сделать всё с наскока, по-быстрому, в результате потратил несколько часов топтания на месте
Добавлено: 27.09.2018 / 12:19
Как можно нормально вставить переменные в БД, если в переменной попадаются всякие кавычки? Возникает ошибка синтаксиса, в поиске все советуют функцию mysql_real_escape_string(), но на неё ругается PHP, что это уже безнадёжно устарело и будет убрано.
# Sitego (27.09.2018 / 12:19)
Как можно нормально вставить переменные в БД, если в переменной попадаются всякие кавычки? Возникает ошибка синтаксиса, в поиске все советуют функцию mysql_real_escape_string(), но на неё ругается PHP
Возникает ошибка синтаксиса
Возникает дырка)
Всё зависит от того, что у тебя используется.
http://php.net/manual/ru/mysql ... g.php
http://php.net/manual/ru/pdo.quote.php
Simba, спасибо. Дырки пока нет, я же и хочу, чтобы всё по фэн-шую было)
Добавлено: 28.09.2018 / 13:09
Люди, хэлп!
Проблема: при выгрузке некоторых файлов в загруз-центр, вылетает ошибка и матерится на вот эту строку (только некоторые файлы, 1 из 10 ):
$res_double = $db->query('SELECT * FROM `download__files` WHERE `md5hash`="' . $md5_hash . '"')->fetch();
Выдает такую беду:
Fatal error: Uncaught PDOException: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '?J!"' at line 1 in /srv/disk2/2498365/www/oldfag.cf/downloads/includes/files_upload.php:102 Stack trace: #0 /srv/disk2/2498365/www/oldfag.cf/downloads/includes/files_upload.php(102): PDO->query('SELECT * FROM `...') #1 /srv/disk2/2498365/www/oldfag.cf/downloads/index.php(141): require_once('/srv/disk2/2498...') #2 {main} thrown in /srv/disk2/2498365/www/oldfag.cf/downloads/includes/files_upload.php on line 102
Подозреваю что проблема при захвате md5hash (->fetch), ибо другие файлы нормально заливаются.
Может можно как-нибудь переписать по другому функцию?
Или чем можно отдебажить выполнение, чтобы понять откуда берётся
right syntax to use near '?J!"'
?
Добавлено: 28.09.2018 / 13:10
пробовал всякие онлайн-проверки кода - пишут что все ок