• Yii2. Как обновить много строк в БД?

    @PiloTeZ
    ...
    У вас ключ в field одинаковый, поэтому и возвращается только последнее значение.
    В качестве ключа я предполагаю должен быть $data->type или что-нибудь типа того

    <?php 
              $form = ActiveForm::begin([]);
              foreach($model as $data) {
                        $form->field($data, 'value[]')->textInput();
              }
              Html::submitButton('Сохранить', ['class' => 'btn btn-success']);
              ActiveForm::end();
    Ответ написан
    Комментировать
  • Как стать web разработчиком на Python не прикасаясь к html, css и javascript?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Никак. Даже если только работать с бэкэндом — все равно надо знать и понимать как работает фронтэнд, т.к. это две очень тесно связанные подсистемы. Основы надо знать в любом случае.
    Ответ написан
    Комментировать
  • Моментальная переадресация?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Обычно это делается на стороне клиента, на яваскрипте.
    Ответ написан
    Комментировать
  • Будет ли изменение нагрузки на БД и сайт?

    402d
    @402d
    начинал с бейсика на УКНЦ в 1988
    во первых https://stackoverflow.com/questions/12864557/selec...
    аналогия тут такая у тебя рота солдат.
    select count() - быстро ответили 40. Так информация всегда в готовом виде
    select count() where - заглянули в списки - ответили
    а вот
    query и $mysqli_result->num_rows;
    уже по армейски
    select * - рота стройся на плацу
    в наличие столько то
    и все стоят ждут команду налево по одному бегом марш
    Ответ написан
    1 комментарий
  • Насколько у меня правильный код ООП php?

    @D3lphi
    Здесь плохо всё, к сожалению.

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

    Класс SearchOrder у вас не только выполняет запросы, но еще и работает с данными, хранит состояние этих самых данных, фильтрует данные (strip_tags()). Непорядок. Это все нужно разделять. У вас вообще получаются какие-то богообъекты, которые умеют во все.

    Вы каждый раз повторяете строки с подготовкой запроса, биндингом параметров, отправкой запроса и тд. Не думали, что неплохо бы было написать какую-нибудь обертку и выполнять запросы как-нибудь так:
    $result = $wrapper->select("SELECT * FROM `tablename` WHERE `id` = :id", ['id' => 5]);

    ?

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

    Зачем вы используете свойства, если можно обойтись обычными локальными переменными:
    $this->orderID = (int) strip_tags($orderID);
    $this->column = (string) strip_tags($column);
    $this->value = (string) strip_tags($value);

    ?

    Почему вы стриппите тэги у идентификатора? вы настолько не уверены в том, что влетает в функцию:
    strip_tags($orderID);
    ?

    Если вы не используете php 7 и, как следствие, скалярный тайпхинтинг, то должны делать проверки на тип входящего аргумента. Если что-то не так с типом, бросаем исключение (А не приводим его к нужному)! Например:
    if (!is_string($arg)) {
        throw new InvalidArgumentTypeException('string', $arg);
    }

    Это в идеале. Вы не обязаны это делать, конечно же. Но вот такие проверки делают приложение безопаснее. Хотя, опять же, повторюсь, в 2017 нужно начинать новые проекты на php 7.1+.

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

    Кроме всего прочего, почитайте про стандарты оформления кода. Вы им не следуете.

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

    Желаю успехов!
    Ответ написан
    1 комментарий
  • Быстрее ли несколько параллельных запросов одного последовательного?

    Melkij
    @Melkij
    PostgreSQL DBA
    Есть ли в распараллеливании запросов рациональное зерно?

    Есть, если треды не дерутся за одно и те же ресурсы. Например, ходят в физически разные кластеры БД.

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

    Или вы неверно описали наблюдаемый результат или же параллельное выполнение медленнее в 2 раза и дальше ухудшается при конкурентной нагрузке.

    На каком-то этапе параллельные запросы также выстраиваются в очередь.

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

    Если в то же время подать аналогичные запросы с другого клиента, то время ожидания ещё больше растягивается.

    Что подтверждает диагноз. Ресурсов для параллельного выполнения нет.

    Поскольку вопрос затрагивает субд и вы не называете, что там происходит - самое очевидно - вы упёрлись в диски. Возможно даже в механические диски. Добавление новых io задач на диски ожидаемо и очень сильно замедляет весь остальной io.
    Ответ написан
    2 комментария
  • Как составить такое регулярное выражение php?

    Stalker_RED
    @Stalker_RED
    Если у вас есть проблема и вы решили использовать регулярные выражения, у вас уже две проблемы.


    Серьезно, разбирать html при помощи регулярных выражений - довольно плохая идея. Только если вы хорошо понимаете что вы делаете, как оно работает и в каких условиях.

    Есть же php.net/manual/en/refs.xml.php
    php.net/manual/en/book.dom.php
    И более удобные, но менее шустрые штуки типа Zend_Dom_Query
    (к более старой версии есть инструкция на русском)
    Ответ написан
    1 комментарий
  • Как безопасно передавать данные в mysql запрос?

    @Snewer
    Используйте PDO
    Ответ написан
    Комментировать
  • Трудоустройство на позицию PHP?

    @tester_toster
    Для каждой задачи есть определенный инструмент, когда их несколько - выбирается по желанию разработчика.
    Большинство сайтов в интернете на PHP
    Большинство сайтов - простые, а следовательно разрабатывать их будут на php, так как готовых решений больше всего под него.
    Ну я бы и не сказал, что php не очень перспективный, php 7 довольно неплох.
    У меня аналогичная ситуация, но плюсов перехода на другой язык - например, на nodejs я не вижу, минус вижу только 1 - время и опыт для нового языка.
    Мое мнение - возможностей языка хватает с избытком, там где их не хватает уже лучше использовать c++, go, возможно потому, что c++ мне легко дался в университете и понравился)
    Ответ написан
    Комментировать
  • Как получить только N количество файлов из папки?

    likenoother
    @likenoother
    Не используйте scandir на таком количестве файлов.
    Попробуйте
    $dir = opendir($rootPath);
    while($file = readdir($dir)){//тут цикл на 100
    if(is_dir($rootPath .'/'. $file)){
    }
    }
    Ответ написан
    1 комментарий
  • Как вы, опытные, поступаете в таких случаях?

    egor_nullptr
    @egor_nullptr
    Как вы поступаете в таких случаях когда api не возвращает коды ответов, а возвращает тексты?

    Берём другой API.
    Ответ написан
    Комментировать
  • PHP: Как удалить пользователя из базы после истечения сессии?

    ThunderCat
    @ThunderCat
    {PHP, MySql, HTML, JS, CSS} developer
    При быстрой регистрации пользователь добавляется в базу, при разлогине - пользователь удаляется.
    Вам не кажется что тут есть некое лишнее телодвижение? Не проще хранить всю ту лабуду что вы при регистрации пишете в базу в сессии?
    Как вариант - храните в редис, там есть время жизни записи, все что мертвое - отвалится само собой по таймауту.
    Ответ написан
    Комментировать
  • Как удалить дубликаты?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    COUNT(DISTINCT `IP`)
    Только количество уникальных IP в общем случае не равно количеству уникальных посетителей.
    Ответ написан
    2 комментария
  • Как получить данные SQL запросом, начианя с конкретное строки?

    @ZhukovAN
    Отказаться от подхода "черт-те-как спроектируем БД, а потом будем задалбывать ее сложными SQL-запросами, жрущими непомерные ресурсы на тривиальных задачах". Если id, действительно, "строка случайных символов", то полезной информации в ней ноль. В этом случае сделать рефакторинг и заменить id на автоинкрементное целочисленное поле с индексом и делать выборку простейшимWHERE id > :thePreviousMaxId. Если в id все-таки имеется осмысленная информация, используемая не только для обеспечения уникальности - добавить автоинкрементный альтернативный ключ, сведя тем самым решение к предыдущему варианту. В любом случае это будет эффективнее, чем заниматься запоминанием ранее полученных id
    Ответ написан
    9 комментариев
  • Как максимально перемешать строки?

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    Каждый IP адрес это 32-битное целое.

    Можно отсортировать по обратному порядку бит в числе – это здорово раскидает соседние адреса.

    Понадобятся три функции:
    function ip2n( $ip ) { // строку ip перевести в целое
    	$ipa = explode('.', $ip);
    	return $ipa[0]<<24 | $ipa[1] << 16 | $ipa[2] << 8 | $ipa[3];
    }
    
    function n2ip( $n ) { // целое перевести в строку ip
    	return implode('.', array(
    		$n >> 24 & 0xFF,
    		$n >> 16 & 0xFF,
    		$n >> 8  & 0xFF,
    		$n & 0xFF
    	));
    }
    
    function bitreverse( $n ) { // развернуть порядок бит в 32-битном целом
    	return bindec( strrev( sprintf( '%032b', $n)));
    }


    Теперь остаётся загрузить ваши ip в массив, и прогнать через ip2n, bitreverse, обычную сортировку целых по возрастанию, bitreverse и n2ip. Пример:
    $ips = array(
    	'192.168.1.15',
    	'192.168.1.16',
    	'192.168.1.17',
    	'95.181.217.91',
    	'95.181.217.96',
    	'95.181.217.97',
    	'91.216.3.90',
    	'91.216.3.91',
    	'91.216.3.99',
    	'5.62.157.78',
    	'5.62.157.84',
    	'5.62.157.87',
    );
    
    $ips = array_map( 'ip2n', $ips);
    $ips = array_map( 'bitreverse', $ips);
    sort( $ips, SORT_NUMERIC);
    $ips = array_map( 'bitreverse', $ips);
    $ips = array_map( 'n2ip', $ips);
    
    print_r($ips);
    /* Array
    (
        [0] => 95.181.217.96
        [1] => 192.168.1.16
        [2] => 5.62.157.84
        [3] => 91.216.3.90
        [4] => 5.62.157.78
        [5] => 95.181.217.97
        [6] => 192.168.1.17
        [7] => 91.216.3.99
        [8] => 95.181.217.91
        [9] => 91.216.3.91
        [10] => 5.62.157.87
        [11] => 192.168.1.15
    ) */
    Ответ написан
    2 комментария
  • Yii2 advanced console. Как возвращается rerutn?

    qonand
    @qonand
    Software Engineer
    В консольных контроллерах return у action определяет код возврата, а не информацию которую нужно вывести в консоль. Для вывода данных используйте stdout или yii\helpers\Console
    Ответ написан
    Комментировать
  • Как выполнить запрос select и update с минимальной задержкой?

    @Fortop
    Tech/Team lead
    Помимо транзакции, упомянутой выше можно ещё поставить блокировки на чтение.

    Или же воспользоваться такой конструкцией как
    SELECT ... FOR UPDATE

    И третий случай уже не относящийся к Mysql - использовать системы очередей - Gearman, RabbitMQ
    Ответ написан
    Комментировать