2013-03-15 68 views
0

我有代碼問題。它適用於存在數據庫行的數據。但是,如果數據不存在,那麼它也會給出12345-12345-12345-12345(樣本關鍵字)消息已經註冊。使用另一個鍵。用產品密鑰檢查數據庫中是否存在數據行

這是代碼:

$namecheck = mysql_query("SELECT pkey FROM license_key WHERE pkey ='$userEnteredProductKey'"); 
     if(is_resource($namecheck) && mysql_num_rows($namecheck) > 0){ 
      $sql_result = mysql_fetch_assoc($namecheck); 
      echo $userEnteredProductKey . " already registered . use another key"; 
    } 

請糾正我,如果我做錯。

+1

什麼是錯誤信息? – n00dle 2013-03-15 15:15:43

+0

也許您需要檢查密鑰是否有效以及是否已被使用。在license_key表中是否有一個字段或表格? – Adder 2013-03-15 15:23:13

+0

是的,表中有字段。 – Apb 2013-03-15 15:27:19

回答

0

首先做其他任何事情,請淘汰mysql_ *功能,然後切換到使用PDO的MySQLi之前。特別是如果你的項目正在處理串行密鑰或一些唯一的密鑰。截至目前您的查詢可以通過注入額外SQL很容易被黑客入侵

回到問題:

,因爲它執行呼應聲明這意味着,如果語句被執行,這意味着is_resource()和mysql_num_rows()都返回true。

你爲什麼不檢查數據庫,並再次查看是否存在與12345-12345-12345-12345記錄,好像mysql_num_rows你爲什麼不的var_dump $也返回> 0

sql_result並查看它打印的內容

+0

感謝您的建議。我現在正在使用MySQLi,但仍然與此相同。 這是我的代碼: '$ query = mysqli_query($ mysqli,「SELECT custname FROM license_key WHERE pkey ='$ userEnteredProductKey'」); if($ row = mysqli_fetch_assoc($ query)) { echo $ row ['custname']; echo(「使用的註冊碼」); }' 任何人都可以告訴我我做錯了什麼。 – Apb 2013-03-16 05:44:54

0

建議不要使用mysql_query。試試下面。

$mysqli = new mysqli(DB_SERVER, DB_USERNAME, DB_PASSWORD, DB_SELECT, DB_PORT); 

$stmt = $mysqli->prepare("SELECT pkey FROM license_key WHERE pkey =?"); 
$stmt->bind_param('s',$userEnteredProductKey) ; 

$stmt->execute(); 
$stmt->bind_result($pKey); 
$stmt->fetch(); 
$stmt->close(); 

if($pkey!=''){ 
    echo $userEnteredProductKey . " already registered . use another key"; 
} 
+0

嘿謝謝你的回答。但它不起作用。它取代了這一行。 – Apb 2013-03-16 05:13:51