PHP.SU

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

Страниц (763): [1] 2 3 4 5 6 7 8 9 ... » В конец

> Найдено сообщений: 11436
Мелкий Отправлено: 24 Июля, 2017 - 11:28:10 • Тема: Решение ошибок PHP • Форум: Вопросы новичков

Ответов: 4
Просмотров: 85
Посмотрите в указанное место в исходнике.
Плюс назовите свою версию PHP.

Есть вероятность, что у вас какое-нибудь музейное php5.2 или ещё хуже, а указанный код использует анонимные функции, доступные с не менее музейного 5.3
Мелкий Отправлено: 23 Июля, 2017 - 09:42:44 • Тема: Какие типы файлов поддерживает php • Форум: Вопросы новичков

Ответов: 1
Просмотров: 116
Ограничений на имена файлов нет никаких. PHP, как представитель мира unix, отлично знает что имя файла - бесполезный атрибут, ничего о самом файле не говорящий.
Мелкий Отправлено: 21 Июля, 2017 - 13:35:17 • Тема: Объединить массивы для вывода • Форум: Вопросы новичков

Ответов: 6
Просмотров: 190
MouseZver пишет:
что за чушь пхп приложение..... в бд джойнить религия не позволяет ?

Как вы думаете, DBA сотни постгресовых машин не умеет джойнить?

И сюрприз - можно иметь php приложение и не иметь этих данных в базе. Например потому, что это результат внешнего api. Или потому что это разные базы и fdw не спасает. Или какое-нибудь тупое mongodb. Возможностей много.

Впрочем да, спрашивать почему именно переджойнить нельзя на субд мне просто не интересно. Будет или осмысленная причина или фейспалм.
Мелкий Отправлено: 20 Июля, 2017 - 23:35:23 • Тема: Запись числа в научной нотации с известным порядком • Форум: Хранение данных, их вывод и обработка

Ответов: 1
Просмотров: 97
Самый быстрый код - тот которого нет. Иначе говоря: зачем?

В php нет int3 (а в int2 гарантированно 5 значащих цифр не влезают). Есть только int, и тот зависит от того, где и как собрали PHP - 4 или 8 байт. Следовательно для пяти значащих цифр вы абсолютно ничего не получите по памяти относительно стандартного, исконно научного float.

В строковом представлении (для сериализации, сохранения на диск, передачи по сети или ещё чего) - используйте как есть бинарный формат числа. Вам всё равно необходима реализация и читателя и писателя. Используйте стандартный ieee754. pack, unpack. 4 байта float даже без плясок с экспонентой короче на целый байт 5 цифр.

Как выводить всегда в экспоненте - вопрос именно вывода. printf %e %E %g %G
Мелкий Отправлено: 20 Июля, 2017 - 14:25:25 • Тема: Объединить массивы для вывода • Форум: Вопросы новичков

Ответов: 6
Просмотров: 190
Если на базе джойнить нельзя - значит надо джойнить на приложении.
На выбор алгоритмы джойна двух наборов данных:
nested loops: вложенный цикл
hash join: сначала один набор данных пихаете в массив ключ объединения => значения, потом идёте по второму и isset'ом быстро и очевидно джойните
merge join: сортируете оба набора по критерию объединения, идёте параллельно по обоим массивам в одном цикле и склеиваете.

Джойн records_orders отлично в hash join подходит. Пересобираете массив вида (видимо) country_id => число заказов
foreach страны
isset($hash[ $country_id ]) => есть заказы в городе

Чем различаются выполненные и найденные заказы - по представленным данным не понял. Но всё равно алгоритмы те же самые.
Мелкий Отправлено: 16 Июля, 2017 - 21:37:29 • Тема: Проблема с кодировкой (android). • Форум: Вопросы новичков

Ответов: 2
Просмотров: 103
Строитель, таки синтаксической-то ошибкой это не является.

Артем123, синтаксически здесь такой ошибки быть не может. Но сама ошибка и её место говорят, что интерпретатору был передан другой код. Возможно, чем крайне коряво сделанный eval. Вопрос к вашим средствам разработки, что именно и как именно настроено и должно писаться.
Мелкий Отправлено: 15 Июля, 2017 - 18:45:08 • Тема: SQLIte Update or Insert • Форум: Работа с СУБД

Ответов: 1
Просмотров: 115
Индивидуально для каждой субд. Поэтому поправил заголовок темы.

По существу - у вас sqlite на запись. На конкурентную запись. Значит вы осознанно его выбрали и делается одна или три операции вас не волнуют с вашими полутора пользователями.

tonchikp пишет:
Вопрос 1: Беспокоит то, что каждый раз при обновлении (update) куча холостых операций (create, insert), может это как то иначе решается, подскажите.

С sqlite расширением синтаксиса не знаком. По документации похоже, что нативно upsert не умеет делать.

tonchikp пишет:
Вопрос 2: А как вы решаете задачи которые требуются однократно при первом запуске?

Обычно схема данных статична по природе самой реляционной базы. Поэтому схема данных накатывается при раскатке кода проекта в рамках общего процесса установки и обновления. И не присутствует в коде взаимодействия с базой, а вызывается именно вне контекста сайта.

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

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

depency injection, для маленьких приложений singleton всё так же удобен, вот это всё.
Открывать-закрывать на каждое обращение разумеется не надо.
Мелкий Отправлено: 15 Июля, 2017 - 12:31:33 • Тема: Вопрос по индексам • Форум: Вопросы новичков

Ответов: 1
Просмотров: 79
Два FK до users.
Мелкий Отправлено: 11 Июля, 2017 - 15:57:47 • Тема: Разделитель тысячных с обрезкой нулей • Форум: Вопросы новичков

Ответов: 13
Просмотров: 283
Внимание с тримом по ,0. Я не сразу сообразил, но так можно покоцать данные: например, входное значение 5430,00 даст немного не тот результат.
Консистентно отпилить нули с запятой будет
Мелкий Отправлено: 11 Июля, 2017 - 12:29:28 • Тема: Разделитель тысячных с обрезкой нулей • Форум: Вопросы новичков

Ответов: 13
Просмотров: 283
rtrim($num, ',0'), если по-простому.
number_format как раз нули намеренно выводит.
Мелкий Отправлено: 08 Июля, 2017 - 16:45:40 • Тема: Помогите с DB wrapper-ом • Форум: Объектно-ориентированное программирование

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

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

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

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

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

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

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

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

Нынче я постгресовый дба, но и по mysql фокусы тоже кое-какие помню умею.
В целом - сначала делается нормальная схема базы. Потом денормализуется при необходимости.
Мелкий Отправлено: 08 Июля, 2017 - 15:33:43 • Тема: Помогите с DB wrapper-ом • Форум: Объектно-ориентированное программирование

Ответов: 9
Просмотров: 188
Сначала дёргать 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);

Та вы просто издеваетесь, да?
Мелкий Отправлено: 07 Июля, 2017 - 23:02:09 • Тема: Облако для фото • Форум: Прочее

Ответов: 1
Просмотров: 150
Облако надо считать под конкретные расценки конкретных сервисов со своими конкретными объёмами хранения и полосой сети на раздачу. По моим сведениям что-то около двойной или троекратной переплаты относительно своей инфраструктуры (не забудьте учесть сисадминов при подсчёте TCO). Зато нет головной боли с резервированием, обслуживанием, поменьше головной боли с траблшутингом, порой ещё CDN в комплекте бывает. Зато (особенно если есть CDN) можно словить побольше проблем со всякими ркн и прочими цензурами, куда выше шанс угодить в бан просто потому что соседи.
Мелкий Отправлено: 28 Июня, 2017 - 12:00:41 • Тема: Лог по IP • Форум: Вопросы новичков

Ответов: 2
Просмотров: 160
Адрес был 66.219.252.175?
Поищите, не вызываете ли где ip2long, inet_pton, INET_ATON или что-то в этом духе.

mysql так до сих пор и не умеет нативный тип данных для адресов?.. Печаль
Мелкий Отправлено: 26 Июня, 2017 - 15:33:23 • Тема: Как организовать зависимости проэкта • Форум: Вопросы новичков

Ответов: 6
Просмотров: 291
Коммитите в git composer.json и composer.lock
При развёртывании делаете composer install
composer update только на локальной машине разработки с тестированием того что приехало в обновлениях.
Именно composer.lock под гитом будет гарантировать согласованность версий между окружениями.

Страниц (763): [1] 2 3 4 5 6 7 8 9 ... » В конец
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB