2015-05-12 3 views
2

Я пытаюсь научиться использовать PHP PDO в качестве объектно-ориентированного программирования.Не удается заставить классы PHP PDO и OOP работать

Я попытался следующие этих двух учебных пособий: http://culttt.com/2012/10/01/roll-your-own-pdo-php-class/ http://culttt.com/2012/09/24/prevent-php-sql-injection-with-pdo-prepared-statements/

, но я не могу получить что-либо на любой из них, чтобы работать.

Второй дает ссылку для загрузки предварительно написанного класса обертки class.db.php от http://www.imavex.com/php-pdo-wrapper-class/

с помощью этого заранее написанного класса обертки и пытаюсь что-то же просто, как этого tutorial.php (учетные данные изменились):

// Include the database class 
include("class.db.php"); 

// Connect to database 
$db = new db("mysql:host=localhost;dbname=my-db-name", "my-username", "my-password"); 

$results = $db->select("ad_publication"); 
print_r($results); 

Вышеупомянутая страница показывает пустую страницу.

Я знаю, что нет ничего плохого в заранее написанном классе и тексте приведенного выше примера, поскольку он был скопирован непосредственно из учебника, и комментарии полны благодарности и похвалы.

Я знаю, что есть nothign неправильно с моими учетными данными, как это работает отлично:

try 
{ 
    $pdo = new PDO('mysql:host=localhost;dbname=my-db-name', 'my-username', 'my-password'); 

    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    $pdo->exec('SET NAMES "utf8"'); 

    $output = 'Connection Successful'; 
    echo $output; 
    } 
    catch (PDOException $e) 
    { 
    $output = 'Unable to connect to the database server.' . $e->getMessage(); 
    echo $output; 
    exit(); 
    } 

и выходы Connection Successful

Мой сервер работает PHP 5.5 и таблицы, используемые в приведенном выше примере является InnoDB таблицей ,

Когда я запускаю пример оператора выбора мои журналы ошибок показывают:

PHP Notice: Undefined variable: GhG678 in /var/www/vhosts/mywebsite.com.au/httpdocs/booking/tutorial.php on line 7

линия 7:

$db = new db("mysql:host=localhost;dbname=my-db-name", "my-username", "my-password"); 

PHP Warning: Creating default object from empty value in /var/www/vhosts/mywebsite.com.au/httpdocs/booking/class.db.php on line 18

линия 18:

$this->error = $e->getMessage(); // (from public function __construct)` 

PHP Fatal error: Call to a member function select() on a non-object in /var/www/vhosts/mywebsite.com.au/httpdocs/booking/tutorial.php on line 9

линия 9:

$results = $db->select("ad_publication"); // (an existing table with data in it) 

Я просто не могу понять, что я мог бы делать неправильно, особенно, как класс-оболочка не была написана мной и никто другой не жалуется на него (куч похвалы), а содержимое tutorial.php было скопировано непосредственно со страницы с измененным только именем таблицы.

Как я уже говорил, использование PDO-соединения и выполнение обычных запросов PDO без класса-оболочки отлично работают.

Может ли кто-нибудь увидеть что-нибудь, что может пойти не так, или знать что-нибудь, на что я должен смотреть?

+1

поэтому вы предоставляете ссылки на учебные пособия, но не на свой 'class.db.php'? так как ошибка происходит с вашим кодом, разве вы не думаете, что было бы полезно это показать? – Sean

+0

Я бы предположил, что вы допустили ошибку в своей версии 'tutorial.php', поскольку это имя переменной, о котором говорит PHP, не определено, выглядит скорее как пароль. Вы должны указать здесь свой код, а не утверждать, что нет ничего плохого. –

+3

«' my-username "или' "my-password" 'выглядят как' '$ GhG678" '? где вы забыли удалить '$', поэтому он считает, что 'GhG678' является var' $ GhG678' вместо строки? – Sean

ответ

1

Я не уверен, почему я столкнулся с -1 для этого вопроса ?? Я думал, что это было очень полно.

В любом случае, спасибо @Sean за предоставленную подсказку.

В моем пароле есть символ $.

подключение код шахты, что делает работу (как показано выше):

$pdo = new PDO('mysql:host=localhost;dbname=my-db-name', 'my-username', 'my-password'); 

Их код, который я использую это:

$pdo = new PDO("mysql:host=localhost;dbname=my-db-name", "my-username", "my-password"); 

изменения " персонажей ' работал сразу , Пароль был автоматически сгенерирован моими хостами (Plesk), и я не знаю достаточно о PHP, чтобы узнать, что есть разница между ' и ". Я никогда не знал, почему некоторые люди используют один, а некоторые используют другой. Кажется, мне еще многое предстоит узнать.

@ Сеанс, потому что вы не выразили его в ответ, я не мог выбрать ваши предложения в качестве ответа, поэтому я не знаю, как дать вам очки, но большое спасибо за руководство мной в правильном направлении.

+2

вы можете узнать больше о том, как php имеет одинарные кавычки и двойные кавычки на странице https://php.net/language.types.string. например, '$ x = 2; $ y = '$ x'; echo $ y; // возвращает $ x', но '$ x = 2; $ y = "$ x"; echo $ y; возвращает 2' как 'Самая важная особенность строк с двойными кавычками - это тот факт, что имена переменных будут расширены.' – Sean

+0

Спасибо @Sean сейчас. – Almeister9

Смежные вопросы