И это если ещё везёт.
Реально можно повредить структуру строки, потерянная запись, частичная запись поверх и другие приключения.
antobra пишет:
Самое первое - это flock. Его проблема это блокировка файла на момент записи. С записью как раз проблем нет.
Читать последнюю строку с намерением что-то писать на её основе вы должны строго после взятия write flock.
fopen
flock write
fread
some calc
write
unlock
fclose
Если проблема со счётчиком - поставьте рядом redis. Атомарный инкремент там есть, да и сам по себе штук не бесполезный.
Если проблема не только со счётчиком, а ещё и хранением данных - то используйте знакомую вашей команде СУБД. У всех распространённых должны быть конкурентно-безопасные сиквенсы.
Что такое библиотека в вашем понимании, как в одном списке оказались персистентные и временные средства хранения и что можно советовать при полном отсутствии исходных данных, требований к решению и самих исходных задач?
htmlspecialchars() чтобы не было этих < крякозябров а норм символы выводил с бд < ?
htmlspecialchars нужен потому что вы выводите не HTML в HTML и надо соблюдать правила вывода того формата, в который вы выводите. Чтобы случайной кавычкой не сломать в принципе всю страницу (и это в лучшем случае, в худшем - подставить ваших пользователей под XSS)
если теги не заполнены мы бд не дергаем лишний раз
$config - это объект класса с ArrayAccess, который умеет дёргать базу? Или за счёт чего экономия?
Впрочем, в таком случае empty запрашивает offsetExists + offsetGet, поэтому можно сделать даже хуже, смотря как реализовано.
Имя $config для хранения специфичных для каждой страницы keywords и description явно неудачная мысль. И забыли сделать htmlspecialchars при выводе в html
Ну а пустой keywords бесполезен, зачем его выводить?
?
Вроде бы по синтаксису username допустимо указывать - а может только для системных кронов, я сходу не нашёл подтверждения - но рядовому пользователю рутовые права явно бы не дали.
Если столбец устанавливается в его текущее значение, то MySQL замечает это и не обновляет его.
Это внутренняя оптимизация, не влияющая на результат запроса. Приложению всё равно будет рапорт об успешном выполнении запроса. (но affected_rows = 0, если верно помню)
А с чего вы решили, что должно быть двоеточие?
Я пока не вижу решительно никакого кода выполнения запроса и обработки ошибок. Вижу лишь подстановку переменных в структуру запроса - что весьма плохо само по себе в общем случае работы с СУБД, но что не является прямой ошибкой.
Можно. Да хоть через sh.
Если говорить о загрузке файлов через html элемент input type file - то клиенту всё равно как вы настроили свой веб-сервер и на каких языках у вас работает загрузка файлов. Есть запрос http переданный по tcp. Всё остальное на своём сервере можете менять.
моё утверждение о повышении производительности за счёт использования оператора LIMIT истинно? Или ложно?
Два случая:
0) если есть unique по тому что ищем - то лимит роли не играет (гхм, ну кроме limit 0 - эта замечательная вещь даже выполняться не будет, ответит 0 строк сразу на этапе разбора)
Но и вреда от limit 1 не будет.
1) если уникального ограничения нет - лимит играет свою роль и прерывает выполнение запроса сразу по достижении нужного числа совпадений. И планировщик может менять план опираясь на знание того что надо достать только часть строк. Что совпадает с наблюдениями, если MouseZver не докажет обратное.
https://github[dot]com/php/php-src/b[dot][dot][dot]/rfc1867[dot]c#L1060 (php константа UPLOAD_ERR_CANT_WRITE - это UPLOAD_ERROR_F в C исходнике, объявление в начале файла)
Системный вызов write вернул ошибку либо отчитался что записал меньше байт, чем просили. Что именно из этого случилось - без пересборки PHP не понять, E_NOTICE закрыты макросами препроцессора.
Права и возможность создания файла при этом есть, это проверяется немного раньше и кидает E_WARNING в случае ошибки, содержимое файла до лампочки, его рассматриваем как набор байт.
В целом - проблема операционной системы. Может быть upload_tmp_dir был переполнен, может там лимиты на размер файла
MouseZver, а я и не путаю.
Имеющийся limit мало того, что не будет перебирать все совпадающие строки (за ненадобностью) - так ещё и может использовать вообще другой план запроса (основные моменты указаны в мануале, на который я сослался).
Если есть уникальное ограничение и мы по нему ищем - то limit 1 бесполезен, т.к. планировщик и так знает, что по уникальному индексу не умеет смысла продолжать искать после первого совпадения.
rgl пишет:
лишняя работа, достаточно какое-нибудь одно поле
Есть большая разница между "какое-нибудь одно поле" и некоторое определённое поле.
Константу select 1 или выборка непосредственно полей по которым искали - допустимо использовать index only scan.
select primary_key_field - для mysql/innodb одно и то же, можно index only scan получить. Для других надо уточнять
выбор любого inline поля - надо идти читать его из таблицы
выбор external поля (большого text, например) - надо идти сначала в таблицу, затем ещё вычитывать отдельно лежащее содержимое этого файла
А для передачи данных для запроса - есть prepared statements. В mysql, впрочем, на редкость неудобные и лучше использовать pdo.
Подстановка данных в текст запроса должна настораживать сама по себе.