PDO не работает внутри функции - PullRequest
5 голосов
/ 17 мая 2010

Я пытаюсь создать функцию для извлечения содержимого страницы из таблицы MySQL с помощью оператора подготовки PDO.Мой код работает отлично вне заданной мной функции, но независимо от того, что я делаю, он не будет работать внутри функции - я получаю следующую ошибку:

Неустранимая ошибка: вызов функции-члена prepare() для необъекта в /home/tappess1/public_html/pages/stations.php в строке 6

Вот мой PHP:

function getPageContent($page) {
        $st = $db->prepare("SELECT * FROM content WHERE title LIKE ?");
        $st->execute(array($page));
        $pageContent = $st->fetch();
        $text = wordwrap($pageContent['content'], 100, "\n");
        $tabs = 4;
        $text = str_repeat(chr(9), $tabs) . str_replace(chr(10), chr(10) . str_repeat(chr(9), $tabs), $text);
        echo $text;
    }

, а затем

<?php getPageContent(Main);?>

Я даже пытался использовать запрос вместо оператора prepare, просто вызывая getPageContent (), и я получаю ту же ошибку.

Спасибо!

Ответы [ 2 ]

14 голосов
/ 17 мая 2010

Вы пытаетесь получить доступ к переменной $db, которая находится за пределами области действия вашей функции .

Либо повторно инициализируйте базу данных в функции $db = new PDO...., либо - возможно, лучше и проще в вашем случае - импортируйте глобальную переменную:

function getPageContent($page) {
  global $db;

Где и как лучше всего хранить объект глобальной базы данных - предмет множества дискуссий. Если вы хотите в нее войти, здесь - это одно из мест, где можно начать (также есть много других на SO). Но если вы только переходите на PHP, я бы сказал, что использование глобальной переменной - это нормально.

1 голос
/ 17 мая 2010

Переменная $ db неизвестна в вашей функции.

...