2016-02-23 4 views
0

Я создал класс, который расширяет функциональные возможности PDO, в этом классе я создал delete функции:Как удалить больше строк?

public function delete($table, $where, $limit = 1) 
{ 
    return $this->exec("DELETE FROM $table WHERE $where LIMIT $limit"); 
} 

для использования просто:

public function deleteData() 
{ 
    $id = 13; 
    $name = "Test"; 

    $where = "`id` = '{$id}' AND name = '{$name}'"; 
    $this->db->delete('wine', $where); 
} 

, но если я хочу передать несколько строк удалить, должен ли я это сделать?

+0

Почему вы ограничиваете? –

+0

Используйте '$ this-> db-> delete ('wine', $ where, 99);'? Или любое другое число вместо 99. – syck

+0

Так просто измените ограничитель? –

ответ

1

Что-то вроде этого:

public function delete($table, array $binds) 
{ 
    $whereStatements = []; 
    foreach ($binds as $field => &$value) { 
     $whereStatements[] = " $field " . (is_array($value) ? "IN (:$field)" : "= :$field"); 
     $value = is_array($value) ? implode(',', $value) : $value; 
    } 

    $where = 'WHERE ' . implode(' AND ', $whereStatements); 

    $stmt = $this->prepare("DELETE FROM $table $where"); 
    $stmt->execute($binds); 

    // return how many records were deleted 
    return $stmt->rowCount(); 
} 

использование:

$rowsCount = $this->db->delete('MY_TABLE', array(
    'id' => array(1, 3, 5, 2, 6, 7), 
    'name' => 'myName' 
)); 

echo "I just deleted $rowsCount entries"; 

Пожалуйста обратите внимание, что этот код i не проверены.

+0

Хорошее решение, но ваш код удаляет только одну строку. Следуя вашему примеру, если у меня есть три идентификатора, чтобы удалить код, он удалит только одну строку в качестве первого идентификатора, который соответствует предложению 'where'. Может быть, 'execute' должен быть вставлен в итерацию? IDK –

+0

Это зависит от поля имени ... y –

+0

Вы должны быть уверены, что у вас одинаковое имя для всех идентификаторов, которые вы хотите удалить. –

1

Написать свой код, как показано ниже: -

public function delete($table, $ids) // No need to set limit 
{ 
    return $this->exec("DELETE FROM $table WHERE id IN($ids)"); 
} 

public function deleteData() 
{ 
    $id1 = 13; 
    $id2 = 14; 
    // Id(PK) is enough for "delete" query 
    $this->db->delete('wine', "$id1,$id2"); 
} 

OR 

public function deleteData() 
{ 
    $idsArr = ['13','14']; 
    $ids = implode(',',$idsArr); 
    // Id(PK) is enough for "delete" query 
    $this->db->delete('wine', "$ids"); 
} 

Надеется, что это поможет :)

Смежные вопросы