PDOStatement :: fetch иногда возвращает false, но errorInfo () пусто - PullRequest
0 голосов
/ 19 мая 2018

У меня странная проблема с 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 ()

1 Ответ

0 голосов
/ 19 мая 2018

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...