Всегда, но всегда, развивайтесь на той же платформе, что и ваша производственная платформа. Старайтесь изо всех сил отражать версии серверного программного обеспечения (PHP, MySQL и т. Д.). Между установками всегда будут различия, особенно в том, как разные ОС работают. Используйте старый скрипт phpinfo () на каждом сервере, чтобы сравнить различия, если они есть.
В любом случае, даже если на обеих платформах Win и Linux установлены одинаковые версии всего, проверили ли вы свою конфигурацию? Другими словами, является ли имя хоста MySQL в вашем DSN локальным хостом MySQL (связанным с вашей платформой разработки Win) или реальным хостом, который использует сервер Ubuntu? Или они оба "localhost" в любом случае? Дважды проверьте это. Кроме того, вы зеркалировали все данные на обоих серверах?
Знаете ли вы, что на сервере Ubuntu есть PDO? Вы, по сути, сказали, что вы предполагаете, что они одинаковы. Не предполагайте, проверьте.
Как упоминалось sobedai , посмотрите на вывод var_dump($dbconn)
, проверьте, что это на самом деле объект PDO, и идите оттуда.
Для меня это типичное развертывание PDO:
// 'logger' is a custom error logging function with email alerts
try {
$dbh= new PDO(dsn);
if ( is_a($dbh, "PDO") ) {
$sql= 'SELECT field FROM table';
$stmt= $dbh->query($sql);
if ( is_a($stmt, "PDOStatement") ) {
// handle resultset
}
else {
// weirdness, log it
logger("Error with statement: {$sql}" .$dbh->errorCode());
}
}
else {
// some weirdness, log it
logger('Error making connection: '. $dbh->errorCode());
}
}
catch (PDOException $e) {
logger('PDOException caught in '.__FILE__.' : '. $e->getMessage());
}
catch (Exception $e) {
logger('General Exception caught in '.__FILE__.' : '. $e->getMessage());
}
Примечание. Я использую PDO :: errorCode, ссылаясь на коды состояния SQL-92 .
Также обратитесь к руководству , насколько это возможно.