Существует ли библиотека PHP, которая выполняет проверку и очистку данных MySQL в соответствии с типом столбца? - PullRequest
1 голос
/ 23 апреля 2010

Вам известна какая-либо библиотека с открытым исходным кодом или инфраструктура, которая может выполнять некоторые базовые функции проверки и экранирования для базы данных MySQL.

Я предполагаю что-то вроде:

//give it something to perform the quote() quoteInto() methods
$lib->setSanitizor($MyZend_DBAdaptor); 

//tell it structure of the table - colnames/coltypes/ etc
$lib->setTableDescription($tableDescArray); 

//use it to validate and escape according to coltype 
foreach ($prospectiveData as $colName => $rawValue)
if ( $lib->isValid($colName, $rawValue))
 {
 //add it to the set clause
 $setValuesArray[$lib->escapeIdentifier($colName)] = $lib->getEscapedValue($colName,$rawValue);
 }
else {
 throw new Exception($lib->getErrorMessage());
 }

и т.д ...

Я изучил - Zend_Db_Table (который знает об описании таблицы) и - Zend_Db_Adaptor (который знает, как экранировать / санировать значения в зависимости от TYPE)

, но хотя онимогут дезинфицировать, они автоматически не делают каких-либо умных проверок перед обновлениями / вставками

Кто-нибудь знает хорошую библиотеку PHP для предварительной проверки такого рода проверки, которую я мог бы использовать вместо того, чтобы писать свою собственную?

Я предполагаю много такого рода вещей:

   ...  
   elseif (eregi('^INT|^INTEGER',$dataset_element_arr[col_type]))
    {
    $datatype='int';

    if (eregi('unsigned',$dataset_element_arr[col_type]))
        {
        $int_max_val=4294967296;
        $int_min_val=0;
        }
    else    {
        $int_max_val=2147483647;
        $int_min_val=-2147483648;
        }
    }

(ps Я знаю, что eregi устарела - это всего лишь пример трудоемкого кода)

1 Ответ

1 голос
/ 23 апреля 2010

Я написал много кода в Zend_Db.

Код не выполняет большую дезинфекцию или экранирование при обновлении / вставке, поскольку использует параметры запроса. Вам не нужно беспокоиться о внедрении SQL, если вы передаете динамические значения в запрос, используя параметры.

См. Мой ответ на , чтобы избежать инъекций MySQL с классом Zend_Db для получения дополнительной информации.

MySQL также поддерживает некоторые типы данных, такие как BIGINT, которые больше, чем целые числа PHP, поэтому вы должны вместо этого представлять их в строках PHP. Тогда есть значения MySQL DATE и так далее. Лучше просто проверить значения, вставив их в базу данных и справившись с любыми исключениями.

...