Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Làm thế nào để bạn đề xuất tên người dùng duy nhất cho người dùng trong PHP?

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách tắt chỉ mục trong innodb

  2. Mysql Lưu trữ một biến với kết quả của TRƯỜNG HỢP CHỌN

  3. Java:com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException:Không thể tạo kết nối với máy chủ cơ sở dữ liệu

  4. Codeigniter hoạt động bản ghi truy vấn mất quá nhiều thời gian để tải dữ liệu từ cơ sở dữ liệu

  5. Không thể truy cập Amazon RDS bằng Eclipse