2014-07-05 3 views
-1

Краткая история. У меня есть класс, который обрабатывает запросы к базе данных, и он вилки в какой-то момент в зависимости от типа инструкции, который был передан ему. Если это был SELECT, он что-то делает. Если это был (успешно) INSERT, UPDATE или DELETE, он делает что-то еще. Я полагался на PDOStatement::rowCount, чтобы определить его, и он отлично работал на моей предыдущей системе. Однако после переноса класса на другой сервер изменилось поведение PDOStatement::rowCount (теперь он возвращает количество строк, возвращаемых оператором SELECT). Я прочитал в руководстве PHP, что такое поведение может происходить и что оно несовместимо и зависит от базы данных.Определение типа инструкции в PDO

Так что мой вопрос. Есть ли еще один надежный способ определить, какой тип утверждения был передан PDO? Думаю, я мог бы написать метод анализа синтаксиса оператора и добавить его в класс, но, возможно, есть и другой способ (встроенный метод?), И в этом случае я не должен пытаться изобретать колесо. Благодарю.

+0

ищет ключевое слово в запросе, переданного для подготовки заявления? – hjpotter92

+0

Да, это очевидный ответ. Но я просто просил убедиться, что я не буду вставлять винт с помощью плоскогубцев, если рядом со мной есть отвертка. – Avi

ответ

0

Набор PDO::ATTR_ERRMODE атрибут сначала.

$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

Тогда ...

try { 

    $stmt = $pdo->prepare($sql); 
    $stmt->execute($values); 

    try { 

     $rows = $stmt->fetchAll(); 

     /* The SQL was SELECT */ 

     $count = count($rows); 


    } catch (PDOException $e) { 

     /* The SQL was INSERT, UPDATE or DELETE */ 

     $count = $stmt->rowCount(); 

    } 

} catch (PDOException $e) { 

    /* Execution Failure */ 

    $error = $e->getMessage(); 

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