2012-06-20 38 views
10

Tôi đang tìm một ví dụ làm việc đầy đủ PDO PHP với các phương pháp hay nhất để chạy truy vấn và xử lý lỗi. Đây là những gì tôi có cho đến nay.PHP PDO for Dummies

KẾT NỐI. Nếu bạn không làm theo cách này, lỗi kết nối sẽ mặc định hiển thị thông tin đăng nhập DB cho tất cả người dùng trang web của bạn.

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

truy vấn

$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(); 

Tuy nhiên, đây là kết quả truy vấn mà không (thực hiện lợi nhuận false) và thông báo lỗi là trống.

Trả lời

14

Here 's hướng dẫn một khởi động hiện đại để PDO. Nó trả lời một số câu hỏi của bạn và giải thích rất nhiều chức năng PDO cơ bản khác.

Tôi vừa đọc qua ngày hôm qua và thấy nó là một tài nguyên tuyệt vời!

Dưới đây là một trích dẫn dưới 'lỗi':

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(); 
} 
+3

Tôi chỉ phát hiện ra rằng 70% số người, bạn chỉ muốn lớp PDO wrapper đơn giản nhất ra khỏi đó. PDO được over-thiết kế với ngoại lệ và tất cả mọi thứ bởi vì bạn không phải sử dụng nó trực tiếp ... bạn có nghĩa vụ phải ẩn tất cả điều này crap trong lớp DB của bạn. –

3

Theo mặc định, pdo không ném ngoại lệ khi có lỗi.

bạn cần phải làm cấu hình nó để

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

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