Интерес следующий: выяснить, как реально работает механизм выполнения запросов MySQL на движке MySQLi. Я смог разобраться и на базе MySQLi расширения для PHP написать свой движек для БД MySQL, но у меня возникло множество вопросов про внутреннее устройство механизма транзакций. Например, MySQL real escape недокументирована и фильтрует только порядка 7ми последовательностей в модифицированной версии и при этом требует прямого установленного соединения с сервером БД. Это наверное подразумевает, что при подключении к серверу устанавливается кодировка для связи и она должна добавлять к фильтрам нужные для языков последовательности. Это мне проверить не удалось и я написал дополнительные функции проверки SQL, когда выяснил, что на Российских хостингах real_escape может быть отключен по некоторым причинам для некоторых пользователей: PHP: // Cleanup inner SQL protected static function innerEscape( string $v ): string { return mysqli_real_escape_string( self::$dbx_lnk[0], str_ireplace( [' OR ', '||', ' AND ', '&&', ' ON ', "'", '--+', 'qq', '"', '--', '%'], [' or ', ' || ', ' and ', ' && ', ' on ', '\'', ';', '', '"', '--', '%'], addslashes( htmlspecialchars($v) ) ) ); } Уязвимостей гораздо больше, чем видно и вы можете ислледовать шаги экранирования, понимая, что, например, OR 1 = 1 может быть представлено в запросе, как || 1 = 1 и это тоже уязвимость ... PHP: // Cleanup outer SQL protected static function escapeOuter( string $s ): string { return preg_replace( ['/(\/\*\s*\w*\s*(?!.\/\*))/si', '/(\-\-\s*\w*\s*(?!.\-\-))/si', '/(or\s*\w*\s*=\s*\w(?!.*or)|\|\|\s*\w*\s*=\s*\w(?!.\|\|))/si', '/[\x{10000}-\x{10FFFF}]/u'], [';', ';', '', '\xEF\xBF\xBD'], str_replace( ['--+', '"', "\x1a", '%', 'qq ', '--'], [';', '"', '\\Z', "\%", '--'], trim($s), ) ); } В общем, PDO тут не спасет даже с подготовленными запросами. Предлагаю поделиться информацией на предмет: "как взломать MySQL". Есть также PDO, но нет большой разницы, а в производительности выигрывает расширение mySQLi. При написании своего движка БД я надеялся на auto commit, когда думал об защите от падения БД. У меня получилось создать статический кэш, который можно использовать без подключения для БД и брать данные их статики на JSON. Я думал, что он накапливает транзакцию а потом отправляет. Это оказалось не правда и работает это с ошибками так как savepoints недокументированы. Было решено делать накопление запросов в стек и объединить на UNION. Тогда при включении соединения с БД мы просто отправляем цеполчу SQL и БД становится актуальна, а данные при этом обновляем в самих статических кэшах. Я бы хотел у знающих спросить совета, как лучше это сделать. У нас есть ограничение PCRE, которое на позволяет брать xQuery из-за сложного парсинга. У меня сейчас есть JSON и я не пишу свою БД no SQL так как мне нравится SQL, а хочу написать опции замены строк дыннх для временной поддержки системы, когда БД недоступна или обновляется. Если ли какое-то подобное более менее готовое решение для JSON без сторонних библиотек? Например я храню таблицу {id:1, filed_test: 'probe some text'} и мене для id 0 надо заменить поле field_test. Строками я это умею даже без mb_string, но сейчас строковых программистов не найти, чтобы написать более грамотно. Можно было бы пользователям позволить писать и менять контент, удалять его без подключения к БД, а в последующем при включеннии сервера отправлять стек подготовленных SQL типа: 1) . edit page 2). add comment 3). moderate -> publish 4). reply и так далее. Я прикинул, что здесь auto index для инкремента не сломает систему, так как действия все равно последовательные. Главное обновить статическую копию данных. Есть ли идеи, как это лучше сделать? Redis и Rabit я не использу ... Также я нашел ряд проблем с RLIKE, LIKE и укороченными запросами из-за SQL уязвимостей и для своей системы оставид только RegExp. Хтелось бы расширить API всякими поисками по дате или фильтрами типов, как в Angular. Приму сылки на информацию по теме. Когда нибудь я напишу расширения для PHP и опубликую вне своего framework ... Сейчас это не доконца реализовано, а идей много.
Тесты для ленивых я не пишу так же, как и не обязан давать ни чего готового, читая про моветон с неподдельной ноткой неприязни. Если хотите быть умнее, лучше понимать и получать больше за это - возьмите командную строку и проверьте ... Свой UNIT можете подставить людям, которые сами же не понимают, как работает код, который они используют, а также людям, которые располагают чужими деньгами для людей, которые не понимают, как этот код работает. Я лишь в будущем могу как-то это предотвратить на уровне системы, но, в данный момент это не получается. escapeOuter - весь SQL; innerEscape - некоторые сегменты, например, внутри значений = '' и других частях. p.s. может тебе еще выложить автоинжектор готовый, чтобы другие script kiddie выглядели аки хацкеры? p.s.: rotopidoren not a federal.
Я с этими людьми, которые ставят диагнозы типа "пациент" по почерку на форуме(не перепутай психиатров с бесполезными для программистов хирургами), как бы разработчик в прошлом и они меня хорошо знают. А ты, теперь, пойди и усвой все три стиля "айкидо" по MySQL от процедурного и функционально до смешанного, когда сможешь сджойнить 5 таблиц с помощью INNER, где повторяются имена ячеек field_id и filed_date в таблицах, а данные в этих ячейках разные и они не схлопываются в результате запроса. Потом можете рассказывать зачем знать все три стиля, про важность UNIT тестов и их пользу для зарплаты.
Что не покидает ощущения гугло-перевода... Либо автор типа учителя Йоды... "слов неважен для смысла порядок" ну и вообще сложно понять о чем пост. Типа он такой крутой - разбил впух и в прах стандартный MySQLi и PDO... Но примеров не покажет, никому ничего не скажет... Сами е.. сь типа? Какое то меряние пиписьками по сложному запросу SQL, хотя не факт что он сложный. Многие вещи непонятны вовсе - типа написание Кеша дополнительного к бд, да ещё и хранение всего этого в json файлах Главный вопрос - что автор хотел спросить на форуме, или просто рассказать о своём супер супер проекте решил?
тот факт что ты пропеллериваешь пропаганду детского сада, выбешивает еще больше. Просто иди наxуй обратно в 4 стенки.
Твои предки Я не соревнуюсь в крутости. Мне некогда. Твои предки уже измеряли аналом письки монголов и после этого стали татарами. Ты просто не забывай, что живешь в России, где доминируют Русские(сделать тебя Русским снова, отремонтировав генетику такой же писькой только белого человека не сложно, но мы по низкосортному говну не ездим и провокаторов не развиваем) ... Модераторов прошу ценную тему освободить от провокаторов и очистить заранее, чтобы люди, которые хотят и могут поучаствовать в улучшении будущих версий нашего любимого PHP могли писать свободно и принимать участие в этой теме форума.
@Full-R, ты нормально объясни, чтобы тема была ценной Пока что другие написали в теме более вменяемые вещи, чем ты.
Неадекватное поведение тс достойно бана, хотя бы за разжигание межнациональной розни и переход на личности
@ADSoft, поддержу. Этот абзац – просто «Абзац»! --- Добавлено --- Походу ТС только за этим и приходил. Тут «политических» немного приструнили. Решил поддать огоньку.