2017-08-03 88 views
0

在我的應用程序中,此PHP代碼應檢查現有用戶名,如果存在,請不要在數據庫中創建新行。無論如何,該應用程序仍然在MySQL數據庫中創建新行。如果在mysql中註冊語句

下面是檢查代碼:

<?php 

//$password = "password"; 
//$username = "username"; 
require "conn.php"; 
$password = $_POST["password"]; 
$username = $_POST["username"]; 
//$url_id = mysql_real_escape_string($_GET['username']); 
$sql = "SELECT * FROM UserData WHERE username ='$username'"; 
$result = mysql_query($sql); 

if(mysql_num_rows($result) >0){ 
    break; 
}else{ 
    $stmt = $conn->prepare("INSERT INTO UserData (username,password) VALUES (:username,:password)"); 
$params = array(
    ':username' => $username, 
    ':password' => $password 
); 
$stmt->execute($params); 
} 

?> 
+0

你**絕不能**使用'mysql_xxx'函數這是depr自從php5.5(超過3年前)出現並自PHP7以來因安全問題而被刪除(請參閱http://stackoverflow.com/q/12859942/3992945)。請使用'mysqli_xxx'或'PDO'來代替http://php.net/manual/en/mysqlinfo.api.choosing.php。 –

+0

這是開始時的錯誤方法。您希望在數據庫方案中創建用戶名字段UNIQUE,然後在嘗試插入新記錄時檢查是否存在違反此限制的錯誤。 – CBroe

+0

檢查'$ sql'的內容和'mysql_num_rows($ result)'的返回值。此外,休息聲明並不屬於這裏;它用於循環。但它什麼都不做,這可能是你想要的。 CROZET關於使用現代/支持的mysql庫的建議絕對是值得注意的 –

回答

0
$results = $mysqli->query("SELECT * FROM UserData WHERE username ='$username'"); 
if ($results) { 
    if($results->num_rows === 0) 
    { 
     $stmt = $conn->prepare("INSERT INTO UserData (username,password) VALUES (:username,:password)"); 
     $params = array(
      ':username' => $username, 
      ':password' => $password 
     ); 
     $stmt->execute($params); 
    } 
} 
?> 
  1. 您應該使用mysqli而不是mysql,因爲它已被棄用
  2. 其次,你應該檢查if($results->num_rows === 0),做你的INSERT
+0

但它在運行時崩潰並且不會添加新行。 –

+0

_crashes_是什麼意思?你有沒有檢查'echo $ results-> num_rows'?這是否等於0? –

+0

我們將您的代碼實施到Android應用中,並且在沒有與當前用戶名匹配的用戶名的示例時,它會崩潰。 –