Простую альтернативу этой проблеме можно решить, предоставив соответствующие разрешения в самой базе данных. Например: если вы используете базу данных mysql, введите в базу данных через терминал или предоставленный интерфейс и просто следуйте этой команде:
GRANT SELECT, INSERT, DELETE ON database TO username@'localhost' IDENTIFIED BY 'password';
Это ограничит пользователя ограничиться только указанным запросом только. Удалите разрешение удаления, и поэтому данные никогда не будут удалены из запроса, запущенного с php-страницы. Второе, что нужно сделать, это очистить привилегии, чтобы mysql обновлял разрешения и обновления.
FLUSH PRIVILEGES;
Дополнительная информация о flush .
To см. текущие привилегии для пользователя, вызывают следующий запрос.
select * from mysql.user where User='username';
Подробнее о GRANT .
Какой-то парень написал пакетную программу для генерации случайных чисел на основе сторон кристалла на моем компьютере, подумал, что я поделюсь ею.
@echo off
set SIDES=6
:start
set BUF=%random%
if %BUF% GTR %SIDES% (
goto start
)
echo %BUF%
pause
goto start
Выполняет свою работу, но угадайте, насколько она медленная ...
Я работал с подобными вещами, написанными индийскими разработчиками. Гигантская главная форма, глобальные vars и т.д. К счастью, мой босс после долгих трудов смог значительно уменьшить этот беспорядок. Но все равно я ненавидел работать с этим приложением. К сожалению, это было математическое приложение, а некоторые из этих индийских парней были хороши в математике, поэтому нам пришлось исправлять приложение, а не переписывать его.
Для меня худшей частью была невероятная медлительность Visual Studio + ReSharper на форме с 20000 строками. Если отключить ReSharper, то с этим можно справиться, но тогда вы не сможете рефакторить это дерьмо так быстро.
Вот злой код: http://code.google.com/p/google-caja/wiki/AttackVectors
Из пакета Oracle в нашем приложении для комиссионных вычислений (до того, как я перестроил его с нуля)
CREATE OR REPLACE PACKAGE BODY Const AS
FUNCTION Basisprov_offen
RETURN INT
IS
BEGIN
RETURN 4;
END;
FUNCTION Basisprov_offen_s
RETURN VARCHAR
IS
BEGIN
RETURN Const.Basisprov_offen || '';
END;
/* ... a lot more creepy stuff ... */
END Const;
И в другом пакете для того же приложения
...
INSERT INTO Texpkorr
SELECT
Stammnummer,
Nummer,
Artikelnummer,
GREATEST ( 0, Texp.Kommanditbetrag - NVL ( 0, 0 )) Kommanditbetrag,
GREATEST ( 0, Texp.Bareinlagebetrag - NVL ( 0, 0 )) Bareinlagebetrag,
GREATEST ( 0, Texp.Provisionohneagio - NVL ( 0, 0)) Provisionohneagio,
GREATEST ( 0, Texp.Provisionmitagio - NVL ( 0, 0 )) Provisionmitagio,
GREATEST ( 0, Texp.Agionachlass - NVL ( 0, 0 )) Agionachlass,
Exportart
FROM Provaltbv, Texp
...
Один парень, с которым я раньше работал, написал приложение для MS Access, которое соединялось с 10 другими базами данных Access, которые занимались начислением зарплаты для компании из списка Fortune 500. По последним данным, там работало около 70 000 сотрудников, и оно все еще использовалось...
Очень мало проверки ошибок в коде, неприятно смотреть, еще хуже устранять неполадки. Мы продолжали использовать базы данных доступа по максимуму, поэтому нам приходилось очищать их каждые пару месяцев.
Да, я знаю, что это не сегмент кода. Просто три факта: MS Access, зарплата и Fortune 500 - делают его злом. Очень злое. Хотел бы я пошутить.