Недавно решил перевести свой небольшой проектик на php с использования MySQL на MySQLi — защита от SQL-injection, быстрее работает и прочие плюшки. Переписал функции DAO на новый лад, но заставить работать не могу от MySQLi нет отладочной информации — на подключении DAO вывод php файл просто прекращается. В итоге DAO свел к минимуму — функция коннекта. Все работает все подключается. Потом решил добавлять функции в DAO по одно и искать где проблема, на первой же функции подключение файл прекратилось. В php.ini выставлено E_ALL | E_STRICT. Подскажите, как заставить MySQLi сообщать о ошибках, хотя возможно ошибки не уровня MySQL а PHP и у меня где то проблема с синтаксисом, но все равно нет никаких сообщений.
Судя по всему, вывод ошибок отсуствует не из-за использования MySQLi. Попробовал переписать класс на PDO, такая же беда. Теперь возникли сомнения в том, а правильно ли у меня singelton реализован на PHP, тонкостей ООП в PHP не знаю, предположил что так же как и в других языках:
class DB
{
// singleton instance
private static $instance;
// private constructor function
// to prevent external instantiation
private function __construct()
{
$server = "mysql:dbname=auto;host=127.0.0.1";
$username = "root";
$database_name = "dbname=auto";
$password = "root";
// getInstance method
public static function getInstance()
{
if(!self::$instance) {
self::$instance = new self();
}
return self::$instance;
}
public function test()
{
foreach (self::$instance->query("select id from blog") as $row) {
print $row['id'] . "\t";
}
}
Если содержимое метода test перенести в конструктор — все работает при вызове DB::getInstance(), а если оставить как есть то вывод у php прекращается на вызове DB::getInstance->test();
1) Проверьте, нет ли у вас @ перед конструкциями require/include. Если есть — уберите. (Дело в том, что если происходит ошибка в файле, который подключили путем @require_once, то вы не увидите никаких сообщений)
2) Используйте PDO для работы с базой данных.
В итоге получилась некая сборная солянка из вашего решения и моих изысканий. pastebin.com/zMFCXdP9
Прогресс есть, в конструктор выполнение заходит, и даже проходит успешно вроде как создание PDO объекта (узнал расстановкой метода echo в разных точках конструктора). А вот сразу по завершению конструктора вывод прекращается, что дальше делать пока не пойму. Что больше всего бесит — почему нет вывода ошибок от PHP. Уже взял отдельно файл, в нем создал класс и в нем же делаю создание объектов, т.е. никаких include или require. Все равно нет вывода ошибок.
В итоге выяснилось что PHP.ini переведен в режим Production и параметр show_errors = off, его включил получил инфу об ошибках и исправил опечатку и все заработало. Только не пойму как PHP.ini переключил настройки в Production?