php和mysql计算金额

时间:2013-01-05 08:33:11

标签: 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              

1 个答案:

答案 0 :(得分: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注入漏洞。查看查询参数化,或至少忽略,以确保您的代码是安全的。