У меня странная проблема с 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()
Хорошо, я выяснил, что вызывало это странное поведение. У меня есть две очень похожие базы данных на этом сервере MySQL. И я использую постоянные связи с обоими из них. И почему-то (???) PHP PDO иногда создается с выбранной выбранной базой данных.
Я бы никогда не ожидал этого, потому что в new PDO();
У меня есть правильная база данных, которую мне нужно использовать. Но по какой-то странной причине соединение происходит с другой базой данных. Он должен что-то делать с использованием постоянных подключений, потому что когда я отключу использование постоянного соединения, все работает нормально.
Поэтому я, вероятно, собираюсь задать другой вопрос - на этот раз - почему PDO соединяется с другой базой данных, когда это предполагается при использовании сохранения.
try { $sth->execute(); } catch(PDOException $e){ echo $e->getMessage(); }
для начала?