2011-11-29 40 views
5

Làm cách nào để kiểm tra xem tên người dùng có tồn tại bằng PDO không? Tất cả những gì tôi cần biết là một bool true (tồn tại) hoặc false (không). Tôi có những phần đầu tiên được thành lập nhưng không chắc chắn làm gì tiếp theoKiểm tra xem tên người dùng có tồn tại bằng cách sử dụng PHP PDO

$sthandler = $dbhandler->prepare('SELECT username FROM userdb WHERE username=? LIMIT 1'); 
$sthandler->execute(array('username')); 
// ... What's next? 
+0

Bạn đang gonna muốn đếm số lượng hàng mà đi lên từ truy vấn (đánh dấu câu trả lời tom). Nếu đó là 0 người dùng không tồn tại, nếu đó là 1 hoặc nhiều hơn anh ta. Một mẹo: Tôi thường không giới hạn truy vấn, Nếu tên người dùng đã tồn tại nhiều hơn thì một khi tôi có thể ném một lỗi, điều này có nghĩa là một cái gì đó bị lỗi hoặc một kẻ đột nhập có thể sao chép tài khoản ... – HTDutchy

+0

@ s4uadmin - Bạn phải thực thi một số lượng nhất định quyền toàn vẹn dữ liệu trong cơ sở dữ liệu, ví dụ với một chỉ mục duy nhất. Nếu không, bạn sẽ nhận được thử nghiệm điên cho tất cả các khả năng của dữ liệu bị hỏng. –

Trả lời

9

Kiểm tra số lượng hàng:

if ($sthandler->rowCount() > 0) { 
    // do something here 
} 
+0

Cảm ơn, người đàn ông. Đúng thứ tôi cần. Mã cuối cùng: 'if (! $ Sthandler-> rowCount()) ném new invalidUserException();' – enchance

+0

tôi có một câu hỏi xin vui lòng khai sáng cho tôi ví dụ không có số lượng bản ghi tồn tại sẽ là '0'' 0' không lớn hơn '0' Vì vậy, không có gì sẽ happend nên nó được '$ sthandler-> rowCount() <1' vì vậy khi một người dùng tồn tại nó sẽ không làm bất cứ điều gì để tránh trùng lặp và nếu không tồn tại nó sẽ tiến hành? –

2

Chỉ cần lấy hàng:

if($row = $sthandler->fetch()){ 
    // User exists: read its details here 
}else{ 
    // User does not exist 
} 
2
$username_exists = (bool) $sthandler->fetchColumn(); 

Note thậm chí bạn có thể tối ưu hóa truy vấn một chút vì bạn không cần phải chọn tên người dùng.

SELECT username FROM userdb ... 

trở thành

SELECT 1 FROM userdb ... 
Các vấn đề liên quan