3

我试图通过口袋妖怪的名称和类型来显示游戏中某个口袋妖怪的数量,(有两种类型正常和闪亮)我希望它只抓住一种难以解释的类型......对现在它抓住了这两种类型,我不知道为什么这是我的代码:/

$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              
4

1 回答 1

1

我经常在 StackOverflow 上看到的一件事是缺少代码格式。在我看来,解决这个问题是让你的代码对你自己(帮助学习)和其他人(帮助你的读者在这里)更具可读性的好方法。它还减少了水平滚动的需要,允许您在屏幕上并排放置多个编辑器。

这是带有建议的代码格式的代码:

$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 注入漏洞。查看查询参数化,或者至少不污染,以确保您的代码是安全的。

于 2013-01-05T12:52:38.467 回答