2013-01-05 68 views
3

我試圖通過小精靈的名稱和類型來顯示遊戲中的某個口袋妖怪的數量,(有兩種類型,正常和閃亮)我希望它只抓取一個鍵入很難解釋...現在它的掠兩種類型,我不知道爲什麼這裏是我的代碼:/php和mysql的計數金額

$sql23 = " 
    SELECT * FROM user_pokemon 
    WHERE belongsto='". $_SESSION['username']."'AND (slot='1') 
"; 
$result = mysql_query(" 
    SELECT * FROM user_pokemon 
    WHERE belongsto='". $_SESSION{'username'}."'AND (slot='1') 
"); 
while($row = mysql_fetch_array($result)) 
{ 
$sql = "SELECT * FROM pokemon WHERE name='".$row['pokemon']."'"; 
$result = mysql_query($sql) or die(mysql_error()); 
$battle_get = mysql_fetch_array($result); 

$count = mysql_query(" 
    SELECT count(*) FROM user_pokemon WHERE pokemon='".$row['pokemon']." 
    'AND type='".$row['type']."' 
"); 
$count2 = mysql_fetch_array($count); 

老實說,我不明白爲什麼它不工作,任何幫助,將不勝感激:)

$row['pokemon']是口袋妖怪的名字

$row['type']是口袋妖怪(有光澤,正常的,等..)

user_pokemon表的類型,問:

Field  Type   Null  Default  Comments 
----------------------------------------------------------- 
id   int(11)  No      
hp   int(55)  No  30    
pokemon  varchar(50) No      
belongsto varchar(50) No      
exp   int(50)  No  500    
item  varchar(50) No  No Item   
nickname varchar(50) No  No Nickname  
move1  varchar(50) No  Ember   
move2  varchar(50) No  Ember   
move3  varchar(50) No  Ember   
move4  varchar(50) No  Ember   
slot  int(50)  No      
level  int(90)  No  5    
time_stamp timestamp  No  CURRENT_TIMESTAMP 
gender  varchar(25) No  Male   
type  varchar(55) No  Normal   Type: normal/shiny etc 
safari_zone int(10)  No  0    
+5

請不要使用'mysql_ *'函數來編寫新代碼。他們不再被維護,社區已經開始[棄用流程](http://goo.gl/q0gwD)。看到[紅色框](http://goo.gl/OWwr2)?相反,您應該瞭解[準備好的語句](http://goo.gl/orrj0)並使用[PDO](http://goo.gl/TD3xh)或[MySQLi](http://php.net/ mysqli的)。如果你不能決定哪些,[這篇文章](http://goo.gl/YXyWL)會幫助你。如果你選擇PDO,[這裏是很好的教程](http://goo.gl/b2ATO)。另請參閱[爲什麼不應該在PHP中使用mysql函數?](http://goo.gl/J5jAo) – DCoder

+5

提醒您在所有查詢中放置AND之前的空格。 – Hussain

+1

您可以在[SQL小提琴](http://sqlfiddle.com/)上架構架構和一些示例數據嗎? – DCoder

回答

1

的事情之一,我在計算器上經常看到缺乏代碼格式。在我看來,解決這個問題是一種很好的方式,可以讓你的代碼更易讀(艾滋病學習)和其他(幫助你的讀者)。它還減少了對水平滾動的需求,使您可以將多個編輯器並排放置在屏幕上。

這裏是你的代碼提示代碼格式化:

$sql23 = " 
    SELECT 
     * 
    FROM 
     user_pokemon 
    WHERE 
     belongsto = '{$_SESSION['username']}' 
     AND (slot = '1') 
"; 
$result = mysql_query($sql23) or die(mysql_error()); 
while($row = mysql_fetch_array($result)) 
{ 
    $sql = " 
     SELECT * FROM pokemon WHERE name = '{$row['pokemon']}' 
    "; 
    $result = mysql_query($sql) or die(mysql_error()); 
    $battle_get = mysql_fetch_array($result); 

    $count = mysql_query(" 
     SELECT 
      COUNT(*) 
     FROM 
      user_pokemon 
     WHERE 
      pokemon='{$row['pokemon']}' 
      AND type='{$row['type']}' 
    "); 
    $count2 = mysql_fetch_array($count); 
} 

這有助於表明您while缺少一個右括號,且變量$sql23實際上並沒有使用。還要注意,你可以使用雙引號字符串內聯數組值,方法是將它們包裝在大括號中。

正如評論中指出的,您應該升級到PDO或mysqli。另外,如果數據來自用戶,請注意直接向SQL注入值,因爲這會導致SQL注入漏洞。查看查詢參數化,或者至少取消隱藏,以確保您的代碼安全。