2010-08-19 41 views
4

我想在PHP中創建一個用戶登錄/創建腳本,並希望知道在創建用戶時檢查用戶名是否存在的最佳方法。目前,我有以下代碼:檢查mySQL數據庫中現有用戶的最佳方法是什麼?

function createUser($uname,$pword) { 
     $server->connect(DB_HOST,DB_USER,DB_PASS,DB_NAME); 
     $this->users = $server->query("SELECT * FROM user_list"); 
     while ($check = mysql_fetch_array($this->users) { 
      if ($check['uname'] == $uname) { 

我不確定這是做這件事的最佳邏輯。我想加入一個布爾變量來這樣做(if語句之後):

$boolean = true; 
} 
if ($boolean) { 
    echo "User already exists!"; 
    } 
else { 
    $server->query("INSERT USER INTO TABLE"); 
    echo "User added Successfully"; 
    } 

但這似乎有點低效率的 - 有沒有更有效的方式來做到這一點?對不起,如果這有一個基本的解決方案 - 我是一個相對較新的PHP程序員。

回答

7

使用WHERE子句,以獲得給定的用戶名只行:

"SELECT * FROM user_list WHERE uname='".$server->real_escape_string($uname)."'" 

然後檢查查詢結果與MySQLi_Result::num_rows選擇任意行(0或1行):

function createUser($uname,$pword) { 
    $server->connect(DB_HOST,DB_USER,DB_PASS,DB_NAME); 
    $result = $server->query("SELECT * FROM user_list WHERE uname='".$server->real_escape_string($uname)."'"); 
    if ($result->num_rows() === 0) { 
     if ($server->query("INSERT INTO user_list (uname) VALUES ('".$server->real_escape_string($uname)."'")) { 
      echo "User added Successfully"; 
     } else { 
      echo "Error while adding user!"; 
     } 
    } else { 
     echo "User already exists!"; 
    } 
} 
+0

+1 as always..very quick to give any answer – PHP 2010-08-19 10:35:00

+0

Awesome answer。謝謝!一個問題:什麼是。 $ server之前呢?以前從未見過。 – 2010-08-19 10:40:59

+1

@Saladin Akara:這是[字符串連接運算符](http://php.net/language.operators.string)。 – Gumbo 2010-08-19 10:43:27

2

這基本上涉及執行查詢,通常在驗證期間,將成員插入數據庫之前。

<?php 
$errors = array(); 
$alerts = array(); 

if (isset($_POST['register'])) { 

    $pdo = new PDO('[dsn]', '[user]', '[pass]'); 

    // first, check user name has not already been taken 
    $sql = "SELECT COUNT(*) AS count FROM user_list WHERE uname = ?"; 
    $smt = $pdo->prepare($sql); 
    $smt->execute(array($_POST['uname'])); 
    $row = $smt->fetch(PDO::FETCH_ASSOC); 
    if (intval($row['count']) > 0) { 
     $errors[] = "User name " . htmlspecialchars($_POST['uname']) . " has already been taken."; 
    } 

    // continue if there are no errors 
    if (count($errors)==0) { 
     $sql = "INSERT INTO user_list ([fields]) VALUES ([values])"; 
     $res = $pdo->exec($sql); 
     if ($res==1) { 
      $alerts[] = "Member successfully added."; 
     } else { 
      $errors[] = "There was an error adding the member."; 
     } 
    } 
} 

上面的例子使用PHP的PDO,所以改變要使用的語法無論你使用的數據庫抽象。

相關問題