Почему это соединение PDO завершается неудачно?

$hostname = 'localhost';
$username = 'uname';
$password = 'password';
$dbName = 'events';
if (class_exists('PDO')){
 echo("PDO Exists");
} 
else {
 echo("PDO Does Not Exist");
}
try {
 $pdo = new PDO("mysql:host=$hostname;dbname=$dbName", $username, $password);
 $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch(PDOException $e) {
 $error = $e->getMessage();
 die($error);
}
$stmt = $pdo->prepare('SELECT * FROM event');
$stmt->execute();
$events = $stmt->fetchAll(PDO::FETCH_ASSOC);
echo json_encode($events);

Выход

PDO Exists
Fatal error: Call to a member function prepare() on a non-object in /home/blah/getEvents.php on line 25
2 ответа

Это связано с тем, что объект $pdo не определен в этой области. Переехать

$stmt = $pdo->prepare('SELECT * FROM event'); в оператор try после того, $pdo переменная $pdo объявлена и создана.

для выполнения этого запроса вам нужно вызвать метод execute:

$stmt->execute();

Чтобы отладить это, вам нужно сделать var_dump($pdo) чтобы увидеть, что он содержит.


Исключение, вероятно, не выбрасывается. Включите такие исключения:

try {
 $pdo = new PDO("mysql:host=$hostname;dbname=$dbName", $username, $password);
 $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}

licensed under cc by-sa 3.0 with attribution.