2013-06-04 41 views
9

Câu hỏi của tôi khá đơn giản: Có thể sử dụng store_result()bind_result() bằng PHP PDO không?Có thể sử dụng store_result() và bind_result() với PHP PDO không?

Dưới đây là một số mã ví dụ tôi đi qua:

$stmt = $mysqli->prepare("SELECT id, username, password, salt FROM members WHERE email = ? LIMIT 1")) { 
    $stmt->bind_param('s', $email); // Bind "$email" to parameter. 
    $stmt->execute(); // Execute the prepared query. 
    $stmt->store_result(); 
    $stmt->bind_result($user_id, $username, $db_password, $salt); // get variables from result. 
    $stmt->fetch(); 

Tôi đã thấy những được sử dụng trong bối cảnh mysqli, nhưng không phải với PHP PDO. store_result()bind_result() được tham chiếu trong mysqli trên www.php.net. Tôi tò mò nếu họ là hợp lệ, hoặc nếu có phương pháp so sánh.

Chỉnh sửa: Rõ ràng có một số bản dịch giữa hai phương pháp. Giả định của tôi là store_resultbind_result() tương tự với các lệnh fetch() của PDO.

Trả lời

9

Các điểm là, hoàn toàn không có điểm khi sử dụng cả store_result() lẫn bind_result() với PDO.
Chỉ cần lấy dữ liệu của bạn và sử dụng nó ở bất cứ đâu bạn muốn. Đó chính là điểm của PDO.

$sql = "SELECT id, username, password, salt FROM members WHERE email = ? LIMIT 1"; 
$stmt = $pdo->prepare($sql); 
$stmt->execute(array($email)); 
$row = $stmt->fetch(); 

Bây giờ bạn có userdata trong $row mảng.

Lưu trữ hàng kết quả trong các biến riêng biệt là rất hiếm khi thực hành hiện nay. Nhưng nếu bạn thích cách xử lý dữ liệu cổ xưa như vậy, bạn có thể thêm

extract($row); 

vào mã trên để nhận các biến toàn cầu của bạn.

Vấn đề chính với mysqli-way là rất khó sử dụng nó với bất kỳ mức trừu tượng nào.

Trong thực tế đời sống chúng ta bao giờ gọi cho cơ sở dữ liệu trong phạm vi toàn cầu, mà đúng hơn là trong một chức năng như thế này

function getUserData() { 
    // getting data 
    return $array; 
} 

và vì một lý do đơn giản đang được nêu ra chủ yếu được sử dụng này trở nên cực kỳ khó khăn với mysqli! Trong cuộc sống thực, chúng ta không cần biến riêng biệt mà là mảng đơn được trả về. Nhưng với mysqli chúng ta cần phải nhận các biến này trước, sau đó đặt chúng vào mảng và chỉ sau đó trả về chúng. Chỉ điên thôi!

+0

Đó là một điểm tốt. Tôi thấy rằng kỳ lạ, kể từ khi tôi đã độc quyền sử dụng PDO. Nó có vẻ như nhiều bước hơn những gì tôi đã thực hiện trong quá khứ. – Mlagma

2

Thay vì store_resultbind_result; bạn có thể sử dụng ngôn ngữ xây dựng list. Một cách sử dụng ví dụ sẽ là:

$stmt = $pdo->prepare("SELECT id, username, password, salt 
    FROM members 
    WHERE email = ? 
    LIMIT 1") 
$stmt->bindValue(1, $email, PDO::PARAM_STR); 
$stmt->execute(); 
list($user_id, $username, $db_password, $salt) = $stmt->fetch(PDO::FETCH_NUM); 

Các PDO::FETCH_NUM được sử dụng bởi vì:

list() chỉ hoạt động trên các mảng số và giả định số chỉ số bắt đầu từ 0.

1

Có thể và gần đây tôi đã sử dụng trong dự án của mình.

$prep_stmt = "SELECT id FROM member WHERE username = ? LIMIT 1"; 
$stmt = $mysqli->prepare($prep_stmt); 

if ($stmt) 
{ 
    $stmt->bindparam(1, $username); 
    $stmt->execute(); 
    $result=$stmt->fetchALL(PDO::FETCH_OBJ); 
} 
if ($stmt->rowCount() == 1) 
{ 
    echo"user exist"; 
    $stmt->close(); 
} 
Các vấn đề liên quan