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), а сообщение об ошибке пусто.
Ответы
Ответ 1
Здесь - современный справочник стартера по PDO. Он отвечает на некоторые ваши вопросы и объясняет многие другие основные функции PDO.
Я только что прочитал это вчера и нашел отличный ресурс!
Здесь цитата в разделе "errors":
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();
}
Ответ 2
По умолчанию pdo не генерирует исключения при ошибках.
вам нужно настроить его на
$dbh = new PDO("...", "...", "...", array(
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
));
// or
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);