PDOStatement :: fetch иногда возвращает false, но errorInfo () пусто

0

У меня странная проблема с PDO. Код выглядит так:

$dbh = new PDO($dsn, $user, $password);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
try {
  $sth = $dbh->prepare("SELECT ... FROM .... ");
  $sth->execute();
  $result = $sth->fetch(PDO::FETCH_ASSOC);
  if (!$result) {
    print_r($dbh->errorInfo());
    print_r($sth->errorInfo());
  }
} catch(PDOException $e) {
  print_r($e->getMessage());
}

Так что это очень распространенное использование PDO. И код работает, как ожидалось, большую часть времени. Но иногда $result является ложным. Странно, что и PDO :: errorInfo(), и PDOStatement :: errorInfo() возвращают пустой массив следующим образом:

array(3) {
  [0]=> string(5) "00000"
  [1]=> NULL
  [2]=> NULL
}

Я подозреваю, что есть некоторая проблема с подключением MySQL, однако соединение работает нормально, не выбрасывает никаких исключений, сервер MySQL простаивает, доступно достаточно соединений. Ошибок в MySQL или PHP-журнале нет.

Поэтому мой вопрос: как устранить эту проблему больше? Мне нужно знать, почему иногда fetch() терпит неудачу с ложным и нет информации об ошибке в errorInfo()

  • 0
    Не уверен, будет ли это иметь какое-то значение, но, возможно, что-то вроде try { $sth->execute(); } catch(PDOException $e){ echo $e->getMessage(); } для начала?
  • 0
    @NigelRen Да, всегда есть строка для извлечения, таблица остается той же самой, и примерно в 10 запросах 1 происходит сбой с возвратом false.
Показать ещё 7 комментариев
Теги:
pdo

1 ответ

0

Хорошо, я выяснил, что вызывало это странное поведение. У меня есть две очень похожие базы данных на этом сервере MySQL. И я использую постоянные связи с обоими из них. И почему-то (???) PHP PDO иногда создается с выбранной выбранной базой данных.

Я бы никогда не ожидал этого, потому что в new PDO(); У меня есть правильная база данных, которую мне нужно использовать. Но по какой-то странной причине соединение происходит с другой базой данных. Он должен что-то делать с использованием постоянных подключений, потому что когда я отключу использование постоянного соединения, все работает нормально.

Поэтому я, вероятно, собираюсь задать другой вопрос - на этот раз - почему PDO соединяется с другой базой данных, когда это предполагается при использовании сохранения.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню