С классом все в порядке, если вы уверены, что не собираетесь развивать его слишком сильно в будущем.Я предполагаю, что ваш подход заключается в том, чтобы воспользоваться автоматическим цитированием в классе Zend_Db_Select
.Однако, по моему скромному мнению, у него есть некоторые конструктивные ошибки, которые могут привести к проблемам с расширяемостью, если вам нужно изменить или расширить его:
- Он получает некоторые данные, которые впоследствии отбрасываются (объект сущности, чтобыиспользуйте предложение "from").
- Он напрямую управляет выводом SQL запроса
select
, что может быть опасным.Если формат изменяется, а также если вам нужно включить больше элементов в предложение where
, ваш код может стать довольно «мутным» для адаптации к изменениям.
Мой подход заключается в следующем:используйте предложения where
непосредственно в коде и заключайте их в кавычки там, где это необходимо.Это не выглядит особенно чистым для меня.Что-то вроде следующего:
$db->delete('tablename', 'id = ' . $db->quote('1'));
В конце концов, вы даже можете абстрагировать его в метод или класс, чтобы избежать необходимости распределять вызовы $db->quote()
повсюду, что-то вроде этого:
private function myDelete($tableName, $fieldName, $fieldValue)
{
$this->db->delete($tableName, $fieldName . ' = ' . $db->quote($fieldValue));
}
РЕДАКТИРОВАТЬ : Включение нескольких разделов в часть where
сделает его более сложным, и то, насколько вы хотите быть гибким, будет зависеть от вашего конкретного приложения.Например, возможное решение для нескольких предложений «ANDed» может быть следующим:
private function myDelete($tableName, array $fields)
{
$whereClauses = array();
foreach ($fields as $fieldName => $fieldValue) {
$whereClauses[] = $fieldName . ' = ' . $db->quote($fieldValue);
}
$this->db->delete($tableName, implode(' AND ', $whereClauses));
}
$this->myDelete('tablename', array('id' => '1', 'name' => 'john'));
Надежда, которая помогает,