Каковы потери при связывании всех параметров PDO как PARAM_STR? - PullRequest
1 голос
/ 12 марта 2011

Я создаю простой конструктор запросов для PHP PDO, чтобы создавать запросы быстрее, без выполнения большого количества процессов связывания и создания запросов на части, где условия / заказы / ограничения составляются вместе в зависимости от некоторых условий (например, механизм фильтрации где вы можете выбрать некоторые критерии). У меня есть такой метод:

$query->addWhere( 'uid', '>' , 100 );

Который добавляет, где условие и привязывает: uid к 100, я также могу опустить привязку следующим образом:

$query->addWhere( 'date', '>' , 'NOW()' , false );

Но я не привожу информацию типа 100 параметров. Более подробно при выполнении запроса я не делаю bindParam или bindValue, но передаю свою связанную таблицу для выполнения:

$stmt->execute( $query->getBinds() );

Все ли мои параметры рассматриваются как PARAM_STR или он получает тип PDO из типа переменной в массиве? Что я могу потерять с этим? только производительность / память или возможна потеря данных или логическая ошибка?

P.S. Я не хочу создавать другие классы для params, потому что я хочу, чтобы все было просто, я имею в виду что-то вроде:

$query->addWhere( new Field('uid') , '=' , new IntParam( 100 ) ); or something

1 Ответ

1 голос
/ 12 марта 2011

Хотя я не вижу ничего хорошего в таких построителях запросов (вы получаете всего лишь несколько пропущенных слов и теряете столько же, сколько делаете совершенно нечитаемый код из драгоценного SQL), ответ нет: без потерь.
Просто включите режим эмуляциивыключен, и PDO автоматически обнаружит необходимые типы.

$dbh->setAttribute( PDO::ATTR_EMULATE_PREPARES, false );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...