質問は基本的なものだと思うので、簡単な例を示します。
<?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){
// ...
}
}
編集:
使用可能な名前の無限のリストを提供する唯一の方法は、連続番号を追加するなどの非常に単純なルールを使用することです。このような場合は、次のように試すことができます:
SELECT username
FROM user
WHERE username REGEXP '^foo[0-9]+'
...そして:
$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--;
}
}