PHP PDO入门指南

10

我正在寻找一个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),并且错误消息为空白。

2个回答

15

这里是一份现代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();
}

4
我刚刚发现,对于70%的人来说,他们只需要最简单的PDO封装类。PDO使用异常等过于复杂,因为你不应该直接使用它...你应该将这些东西隐藏在你的数据库类中。 - William Entriken

3

默认情况下,pdo在出现错误时不会抛出异常。

您需要配置它以使其抛出异常。

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

// or
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接