@kr_ilya

PDO и INSERT Fatal error: Uncaught Error: Call to a member function prepare() on null Что делать?

Я только начал изучать PDO, строго не судите ))
function __autoload($name){ include($_SERVER['DOCUMENT_ROOT']."/classes/_new.".$name.".php");}
$config = new config;
$db = new db($config);
global $pdo;
//переменные + проверка
$pdo->prepare("INSERT INTO db_users_a (user, email, pass, referer, referer_id, date_reg, ip) 
VALUES (?, ?, ?, ?, ?, ?, ?)");
$arr = array('$login', '$email', '$pass', 'admin', '1', '$time', INET_ATON('$ip'));
$pdo->execute($arr);

Подключение находится в стороннем файле с классом db
class db{
	private $config;
  public function __construct(Config $config)
  {
  	$this->config = $config;
  	$this->connect();
  }

  private function connect()
  {
  	$host = $this->config->host;
  	$dbname = $this->config->base;
 	$charset = $this->config->charset;
 	$user = $this->config->user;
 	$pass = $this->config->pass;
  	$dsn = "mysql:host=$host;dbname=$dbname;charset=$charset";
  	$opt = [
        PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
        PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_LAZY,
        PDO::ATTR_EMULATE_PREPARES   => false,
    ];
  	$pdo = new PDO($dsn, $user, $pass, $opt);
  	return $this;
  }
}

Предполагаю что дело в $db->$pdo->prepare(...). Пробовал по-разному ($db->prepape, $db->pdo->prepare, $pdo->prepare) ничего не получается. Когда все в одном файле - это легко сделать. Но тут нужно каким-то образом обращаться к pdo в классе. Думаю нужно сделать функции prepare() и execute() в классе db, но как в таком случае передавать массив с данными для запроса?
Полный текст ошибки:
Fatal error:  Uncaught Error: Call to a member function prepare() on null in E:\OSPanel\domains\test.ru\api\ajax.php:19
Stack trace:
#0 {main}
  thrown in <b>E:\OSPanel\domains\test.ru\api\ajax.php on line 19

Подключение корректно. Сразу извиняюсь за такое корявое описание проблемы.
  • Вопрос задан
  • 1603 просмотра
Пригласить эксперта
Ответы на вопрос 1
SagePtr
@SagePtr
Еда - это святое
$db = new db($config);
$pdo->prepare(...)
Определитесь, как ваша переменная называется, $db или $pdo
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
27 нояб. 2024, в 19:08
1500 руб./в час
27 нояб. 2024, в 18:19
2000 руб./за проект
27 нояб. 2024, в 17:41
2000 руб./за проект