Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment suggérez-vous des noms d'utilisateur uniques à l'utilisateur en PHP ?

Je soupçonne que la question est basique, je vais donc donner un exemple simple :

<?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){
        // ...
    }
}

Modifier :

La seule façon de fournir une liste infinie de noms disponibles est d'utiliser une règle très simple telle que l'ajout d'un numéro consécutif. Dans ce cas, vous pouvez essayer quelque chose comme ceci :

SELECT username
FROM user
WHERE username REGEXP '^foo[0-9]+'

... puis :

$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--;
    }
}