PHP PDO Удалить rowCount всегда возвращает 0

PHP 5.2.17 (cli) (создано: 17 января 2011 г., 12:51:24) Copyright (c) 1997–2010 The PHP Group Zend Engine v2.2.0, Copyright (c) 1998–2010 Zend Technologies

Вот моя функция

public function remove($id){
        $params = array(':id' => $id);
        $delete_loan = $this->ext_conn->prepare("DELETE FROM loan_program WHERE id = :id");
        $delete_loan->exec($params);
        $affected_rows = $delete_loan->rowCount();  //and not this?
        if ($affected_rows == 1) {
            return array('status' => 'success');
        } else {
            return array('status' => 'failure', 'reason' => 'delete_failed', 'rowcount' => $affected_rows, 'errornfo' => $delete_loan->errorInfo());
        }
    }

Я вызываю его и передаю идентификатор строки в базе данных. Строка удаляется из базы данных, но if ($affected_rows == 1) { всегда ложно. errorInfo() возвращает массив [0] => 0000.

Я просмотрел руководство по PDO и ссылался на http://wiki.hashphp.org/PDO_Tutorial_for_MySQL_Developers#INSERT.2C_DELETE.2C_UPDATE_Prepared_Queries

Разве rowcount() не должен возвращать 1 (или сколько идентификаторов было передано для удаления?

Заранее спасибо.


person joepferguson    schedule 21.03.2013    source источник
comment
так и должно быть, но это предполагает, что id является уникальным/первичным ключом в этой таблице. Вы проверили, возможно, у вас были дубликаты записей?   -  person Marc B    schedule 22.03.2013


Ответы (1)


PDO::exec ожидает строку оператора SQL. Если вы готовите заявление, вы должны вместо этого вызвать PDOStatement::execute.

$delete_loan->execute($params);
person Olaf Dietsche    schedule 21.03.2013
comment
и afaik метод exec() возвращает затронутые строки напрямую - person Christian Koch; 22.03.2013
comment
@ChristianKoch Так бы и было, если бы это был правильный вызов. Но $delete_loan->exec(...) выдает ошибку неопределенного метода. - person Olaf Dietsche; 22.03.2013