Mysql
 sql >> база данни >  >> RDS >> Mysql

Как предлагате уникални потребителски имена на потребителя в PHP?

Подозирам, че въпросът е основен, така че ще дам прост пример:

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да използвам заявка за присъединяване за 4 таблици в релси

  2. Laravel 5.1 Миграция и засаждане Не може да съкрати таблица, посочена в ограничение за външен ключ

  3. COALESCE() за празни (но не нулеви) полета

  4. Получаване на всички записи от MySQL база данни, които са в Google Maps .getBounds?

  5. Не можете да стартирате Insert и Select LAST_INSERT_ID() в една и съща заявка?