0

I connect to MySQL using a PDO and all works fine. To tidy things up I have made an include file that contains the PDO code. This is the full include file:

<?php

$pdo = new PDO('mysql:host=localhost;dbname=******', '******',
'******');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->exec('SET NAMES "utf8"');

printf('hello');
?>

The print hello was just to check the file was being included, which it is. The problem is I now get this error when loading the page

"Fatal error: Call to a member function query() on a non-object in /home3/danville/public_html/test/parkattractions.php on line 9"

Line 9 is $result = $pdo->query($query);

It was all working fine when the db-connect file was part of the main page, it's only now using it as an include I get the error. What has gone rong and how do I fix it?

EDIT: This is the very top of the page getting the error:

<?php
include 'http://www.themeparkfocus.com/db-connect.php';

try
{
$park_id = $_GET['park_id'];
$query="SELECT * FROM tpf_parks WHERE park_id = $park_id";
$result = $pdo->query($query);
}
catch (PDOException $e)
{
$output = 'Unable to connect to the database server.';
//include 'output.html.php';//
}
user2574794
  • 996
  • 3
  • 10
  • 20
  • `$pdo` isn't in the variable scope of your page. Why so, we can't tell. As you haven't shown the relevant context. – mario Aug 11 '13 at 00:05
  • Don't use `include`, use `require`. You'll get a clear error message if the file cannot be found, which may be the case just here. – GolezTrol Aug 11 '13 at 00:10
  • @mario I have edited the question to include the very top of the .php file getting the error, this includes line 9 – user2574794 Aug 11 '13 at 00:10
  • Okay. You're just misusing `include()` then. If you specify an URL, then you include its HTML output, not the PHP source. – mario Aug 11 '13 at 00:10
  • @GolezTrol the file is being found, I tested this by printing out 'Hello' from the include file. `hello Fatal error: Call to a member function query() on a non-object in /home3/danville/public_html/test/parkattractions.php on line 9` is what I see in full when loading the page – user2574794 Aug 11 '13 at 00:12

2 Answers2

1

Use a file path in your include, not the url. If you use an url, at best the url is requested and the contents downloaded, but then it will probably a generated page and not a php source file.

Just open http://www.themeparkfocus.com/db-connect.php in your browser, and you'll see what you include: no PHP code.

Also, use require if you need the file. You will get a clear error message if including the file/url fails, although it probably won't help you in this case, since the url is valid.

GolezTrol
  • 114,394
  • 18
  • 182
  • 210
1

You are including the file using its full URL. That means PHP should see the same thing that you see when you go to that URL. When you go to that URL, do you see PHP code (as PHP would expect) or an empty page?

If you see an empty page, PHP effectively includes an empty file and doesn't execute anything.

You should include using the server side path (like require_once '../db-connect.php';).

Tomas Creemers
  • 2,645
  • 14
  • 15