2013-04-29 34 views
11

Tôi mới sử dụng câu lệnh $ pdo để có thể đơn giản tôi chưa đọc trên php.net. Tôi nhận được kết quả trùng lặp khi truy vấn cơ sở dữ liệu.PDO trả về không đúng, nhưng trùng lặp, dữ liệu. Khóa không có trong cơ sở dữ liệu.

Kết quả:

[0] => Array 
    (
     [umeta_id] => 31 
     [0] => 31 
     [user_id] => 2 
     [1] => 2 
     [meta_key] => fbmeta 
     [2] => fbmeta 
     [meta_value] => someMetaValueStuff; 
     [3] => someMetaValueStuff; 
    ) 

Truy vấn là khá đơn giản:

function getData(){ 
    global $pdo; 
    $query = $pdo->prepare('SELECT * FROM usermeta WHERE meta_key = "fbmeta" LIMIT 0,30'); 
    $query->execute(); 

    return $query->fetchAll(); 
} 

print_r(getData()); 

Vấn đề là các phím được đặt tên (umeta_id, user_id, meta_key, meta_value) DO tồn tại, các phím số đừng. Truy vấn này trả về những câu hỏi này như thế nào? Và làm cách nào để ngăn chặn chúng thậm chí bị trả lại?

+0

trước khi có ai hỏi, vâng tôi đã tự kiểm tra và hạn chế cơ sở dữ liệu để một bộ sưu tập nhỏ, vì vậy các bản sao thực sự không tồn tại. – Nukeface

Trả lời

21

Đó không phải là bản sao, nó chỉ là dòng điện FETCH_MODE bạn đang sử dụng. Để có được như là chìa khóa kết hợp chỉ bạn cần phải xác định như vậy; theo mặc định, nó lấy cả hai.

Sử dụng như sau:

$query->fetchAll(PDO::FETCH_NUM); // to fetch with numeric indexes 
$query->fetchAll(PDO::FETCH_ASSOC); // to fetch with associative indexes 

fetchAll docs
fetch docs

+2

Mát mẻ đã sửa nó. Quá xấu Tôi không thể chọn 2 câu trả lời là trả lời, cả bạn và Yogesh đều ở cùng một lúc. – Nukeface

+0

@Nukeface Tôi nghĩ rằng nó đầu tiên của tôi ... :). Nhưng bạn có thể chấp nhận câu trả lời của bất kỳ ai, lựa chọn của bạn ... :) –

+1

Sẽ làm khi bộ đếm thời gian đếm ngược, các bạn đã nhanh chóng;) Sẽ chọn tùy chọn này, tài liệu tìm nạp đã đi tới hàm tải nơi tôi nên chú ý sự khác biệt trên cái nhìn đầu tiên của tôi, và không. – Nukeface

9

Đây không phải là dữ liệu trùng lặp fetchAll trả về dữ liệu trong mảng số cũng như mảng liên kết.

Xem Docs

Sử dụng này để lấy chỉ mảng kết hợp

return $query->fetchAll(PDO::FETCH_ASSOC); 
Các vấn đề liên quan