2017-01-21 8 views
-2

Quick Edit: Несмотря на то, что он говорит MAMP, я просто храню там свои веб-проекты, и я не использую сервер mysql, который он предоставляет (хотя, когда я пробовал это, он делал ту же ошибку), я использую mysql, который поставляется с workbench MySQL *Как правильно использовать PDO?

в коде PHP я работаю я подключиться к базе данных следующим образом:

$dbh = new PDO('mysql:host=localhost:3306;dbname=mydb', $user, $pass); 

Теперь я тестировал пользователя и пароль для доступа к базе данных и с помощью моего терминала (который подключается успешно), а также с интерфейсом, который предоставляет IDE (phpStorm), который также успешно соединяется.

Мой вопрос заключается в следующем: Как пройти следующую ошибку:

Фатальная ошибка: Uncaught Ошибка: Вызов функции член запроса() на нуль в/Applications/MAMP/HTDOCS/ГИС/4Musketeers/PHP/common.php: 20

Теперь я знаю, что он упоминает линию 20, которая относится к началу моего Еогеаспа блока:

function printDirectors($sqlQuery) { 
    $index = 0; //Counting index for our table 
    global $dbh; //this is how we refer to our global $dbh up top. 

    foreach ($dbh->query($sqlQuery) as $result) { 
     echo "<tr><td class=\"index\">"; 
     echo $index + 1 ."</td>"; 
     echo "<td class=\"FirstName\">"; 
     echo $result['first_name'] ."</td>"; 
     echo "<td class=\"LastName\">"; 
     echo $result['last_name']; 
     echo "</td></tr>"; 
     $index++; 
    } 
} 

Я совершенно уверен, что запрос является правильным, поскольку оно дает мне в результат меня интересует. Запрос:

SELECT DISTINCT directors.first_name, directors.last_name 
FROM directors, actors 
WHERE directors.first_name = actors.first_name AND directors.last_name = actors.last_name 
ORDER BY directors.first_name, directors.last_name; 

И результат существо:

first_name  last_name 
Andrew   Adamson 
Guy   Ritchie 
James (I)  Cameron 
Jay   Levey 
Mel (I)  Gibson 

Это первый раз, когда я на самом деле нужно использовать PDO или SQL с PHP, так что любые советы будут высоко оценены.

+0

Этот вопрос уже был задан десятками раз здесь. Решение всегда заключается в том, чтобы ваше соединение pdo было создано и видимо для этого вызова метода. – Shadow

+0

Я предлагаю вам изучить rebdeanphp, который построен на PDO. Но это действительно просто. – jewelhuq

+0

Ну, видите ли, забавно, что я попытался запустить его снова, и все прошло отлично. И я знаю, я изучил этот вопрос, за исключением того, что моя проблема была запросом и не готовилась. – SomeStudent

ответ

1

Как видно из вывода, причина, по которой вы получаете это, - это то, что вы никогда не создавали экземпляр $dbh. PHP пытается вызвать метод query, но он равен нулю.

+0

У меня создалось впечатление, что '$ dbh = new PDO ('mysql: host = localhost: 3306; dbname = mydb', $ user, $ pass);' выполнил это, и этот синус $ dbh сидит выше моей функции, что это глобальная переменная, я просто ссылаюсь на нее как на глобальный $ dbh, а затем использую $ dbh как любую другую переменную в моей функции. Это неверно? – SomeStudent

+0

Интересно, что вы правы, когда я переместил свой dbh в функцию, с которой он работал. Но это, похоже, идет вразрез с целями глобального, хотя, верно? – SomeStudent

+0

Это странно. Согласно [PHP docs] (http://php.net/manual/en/language.variables.scope.php), это должно работать.Я не говорю, что это правильный способ сделать это, но когда я писал PHP-код, я бы просто создал метод, который возвращал экземпляр PDO. –

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

  • Нет связанных вопросов^_^