Tôi nghi ngờ câu hỏi là một câu hỏi cơ sở, vì vậy tôi sẽ cung cấp một ví dụ đơn giản:
<?php
// Untested code and only one of the many possible ideas
$suggestions = array(
'foobar' => TRUE,
'foo1974' => TRUE,
'foo37' => TRUE,
'drfoo' => TRUE,
'mrfoo' => TRUE,
);
$params = $placeholders = array();
foreach(array_keys($suggestions) as $position => $username){
$params['u' . $position] = $username;
$placeholders[] = ':u' . $position;
}
$sql = 'SELECT username
FROM user
WHERE username IN (' . implode(', ', $placeholders) . ')';
$res = $conn->prepare($sql);
$res->execute($params);
while( $row = $res->fetch(PDO::FETCH_ASSOC) ){
$suggestions[ $row['username'] ] = FALSE;
}
foreach($suggestions as $username => $available){
if($available){
// ...
}
}
Chỉnh sửa:
Cách duy nhất để cung cấp danh sách vô hạn các tên có sẵn là sử dụng một quy tắc rất đơn giản, chẳng hạn như thêm một số liên tiếp. Trong trường hợp như vậy, bạn có thể thử một cái gì đó như sau:
SELECT username
FROM user
WHERE username REGEXP '^foo[0-9]+'
... và sau đó:
$username = 'foo';
$suggestions = array();
$count = 0;
$names_left = 5;
while($names_left>0){
$count++;
if( !in_array($username . $count, $names_taken) ){
$suggestions[] = $username . $count;
$names_left--;
}
}