Следующий код:
class Database {
(...)
public function query($query){
$this->stmt = $this->dbh->prepare($query);
}
(...)
}
Ошибка на моем онлайн-сервере со следующей ошибкой:
2018/04/02 15:16:14 [error] 3472#3472: *3 FastCGI sent in stderr: "PHP message: PHP Fatal error: Uncaught Error: Call to a member function prepare() on null in /var/www/html/example.com/public_html/includes/pdodatabaseconnect.php:38
Stack trace:
#0 /var/www/html/example.com/public_html/index.php(52): Database->query('SELECT * FROM s...')
#1 {main}
thrown in /var/www/html/example.com/public_html/includes/pdodatabaseconnect.php on line 38" while reading response header from upstream, client: XX.XXX.XXX.XXX, server: example.com, request: "GET / HTTP/1.1", upstream: "fastcgi://unix:/run/php/php7.0-fpm.sock:", host: "example.com"
В то время как тот же самый код, зеркальный, отлично работает на моем локальном сервере. Я не вижу различий PDO
введенных в версиях PHP
которые могли бы создать этот другой результат. Есть несколько предложений в Интернете для внесения поправок в аналогичные классы, чтобы исправить эту проблему, но это похоже на то, как нанести гвоздь кувалдой. Код работает на другом сервере с зеркальными файлами, а на другом сервере работает другой проект, но тот же файл класса базы данных.
Я не уверен в возможных различиях, которые может привести к конфигурации сервера для выполнения кода, когда различия в версии незначительны, и я не вижу никаких изменений, которые могли бы отражать ошибку, которую я вижу.
PHP: 7.2.1/MySQL: 5.6.38/nginx: 1.13.2
PHP: 7.0.28/MySQL: 5.7.21/nginx: 1.10.3
Хотя глупая вещь, которую следует упускать из виду, ошибка была довольно тупой, указывая на проблему, которая была неправильным паролем базы данных. Я бы оценил ошибку аутентификации.
Тот факт, что я дублировал все файлы и конфиги, означал, что я был слишком уверен в том, что сайты были одинаковыми. Однако у меня была создана база данных с разными учетными записями пользователей.
$this->dbh
равен нулю. Неправильные конфиги?