PHP PDO для чайников


Я ищу полный рабочий пример PHP PDO с рекомендациями по выполнению запроса и обработке ошибок. Вот что у меня есть на данный момент.

СОЕДИНЯЯСЬ. Если вы не сделаете этого таким образом, сбой подключения по умолчанию предоставит учетные данные БД всем пользователям вашего сайта.

try {
    $dbh = new PDO("mysql:host=localhost;dbname=phor_lang", "phor_lang", "'9lsnthsn9");
} catch (PDOException $e) {
    error(false, "PDO ERROR: " . $e->getMessage());
}

ЗАПРОС

$stmt = $dbh->prepare("INSERT INTO sets");
$stmt->execute()
    or error(0, "USERS ERROR ".__LINE__." ".print_r($dbh->errorInfo(),true));
$setID = $dbh->lastInsertID();
$stmt->closeCursor();

$stmt = $dbh->prepare("INSERT INTO words (language, name, detail, user, type, set) VALUES (?, ?, ?, ?, ?, ?)");
$stmt->execute(array($l1l, $l1w, $l1d, $userID, 'training', $setID))
    or error(0, "USERS ERROR ".__LINE__." ".print_r($dbh->errorInfo(),true));
$stmt->closeCursor();

Однако это приводит к сбою запросов (выполнение возвращает false), а сообщение об ошибке остается пустым.

Author: William Entriken, 2012-06-20

2 answers

Вот современное руководство для начинающих по PDO. Он отвечает на некоторые ваши вопросы и объясняет множество других базовых функций PDO.

Я только вчера перечитал его и нашел это отличным ресурсом!

Вот цитата в разделе "ошибки":

try {
    $conn = new PDO('mysql:host=localhost;dbname=myDatabase', $username, $password);
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e) {
    echo 'ERROR: ' . $e->getMessage();
}
 14
Author: Dean Rather, 2012-06-20 06:41:55

По умолчанию pdo не создает исключений при ошибках.

Вам нужно настроить его на

$dbh = new PDO("...", "...", "...", array(
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
));

// or
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
 3
Author: goat, 2012-06-20 05:23:58