Ошибка Undefined variable: dbh и Undefined variable: dbh Call to a member function prepare() on null?

Решил написать небольшое приватное апи, но сразу не задалось с базой данных, настроил всё нормально, но вот сервер пишет две ошибки при запуске это-го скрипта:

Undefined variable: dbh
Call to a member function prepare() on null

Перепробывал всё что только знаю, но выдаёт всегда эти две ошибки.

Код:

<?php

// MySQL Config
$host = "localhost";
$dbname = "api";
$user = "root";
$pass = "password";
$dbh = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass);


if ($_SERVER['REQUEST_METHOD'] == 'POST') {

	function keyRegister($token) {

		$sth = $dbh->prepare("SELECT * FROM api WHERE token = ?");
		$sth->execute(array($token));
		$tokenbd = $sth->fetchAll();

		if ($token == $tokenbd) {
		    echo(json_encode(array('response' => 1)));
		}
	}
}

keyRegister('ThisIsTestKey');

?>
  • Вопрос задан
  • 105 просмотров
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Внутри функции своя область видимости. Переменная $dbh в этой области отсутствует.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
FanatPHP
@FanatPHP
Чебуратор тега РНР
Вся проблема в том что пишешь код непонятно зачем. Пример: зачем тебе здесь функция? Для красоты?
Сам код функции тоже написан без малейшего понимания
if ($token == $tokenbd) {
Что с чем ты здесь сравниваешь? И зачем? Что возвращает функция fetchAll()? Какой результат ты ожидаешь от этого сравнения? Зачем вообще сравнивать, если ты уже в запросе сравнил?

Вот держи, в порядке баготворительности

pdo.php

<?php

// MySQL Config
$host = "localhost";
$dbname = "api";
$user = "root";
$pass = "password";
$charset = "utf8mb4"; // кодировку за тебя кто задавать будет? Максим Галкин?

$dbh = new PDO("mysql:host=$host;dbname=$dbname;charset=$charset", $user, $pass);
// про ошибки кто будет сообщать? Доктор комаровский?
$dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );


сам файл

<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    require 'pdo.php';
    $sth = $dbh->prepare("SELECT 1 FROM api WHERE token = ?");
    $sth->execute(array($token));
    $tokenOK = $sth->fetchColumn();

    if ($tokenOK) {
        echo(json_encode(array('response' => 1)));
    }
}
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы