3

ゲーム内の特定のポケモンの量を、ポケモンの名前とタイプ別に表示しようとしています (ノーマルとシャイニーの 2 つのタイプがあります) 説明するのが難しい 1 つのタイプだけを取得したいのですが...今では両方のタイプを取得していますが、なぜここに私のコードがあるのか​​ わかりません:/

$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 でよく目にすることの 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 に直接挿入することに注意してください。コードが安全であることを確認するために、クエリのパラメーター化、または少なくとも汚染の除去を調べてください。

于 2013-01-05T12:52:38.467 に答える