1

私はいくつかのデータベース関数に取り組んでおり、何らかの理由で、php関数に引数として渡された配列を使用して単純な挿入/選択を行うために2つの関数を作成しました。問題はここから始まります。

    // basic database functions, to aid the development :D
    static public function Insert($table, $items = array())
    {
        if(is_array($items) == false)
        {
            return false;
        }

        $header = 'INSERT INTO ' . $table . '(';
        $values = 'VALUES(';

        $count = count($items) - 1;
        $cur = 0;

        foreach($items as $key => $value)
        {
            $num = is_numeric($value);

            $header .= $key . ($cur < $count) ? ', ' : ' ';
            $values .= (($num) ? '' : '\'') . $value . (($num) ? '' : '\'') . (($cur < $count) ? ', ' : '');

            $cur ++;
        }

        $header .= ')';
        $values .= ')';

        self::Query($header . $values);
    }

        $pair = array('id' => null,
                      'name' => Database::EscapeString((string)$xml->ID),
                      'avatar_url' => Database::EscapeString((string)$xml->Avatar),
                      'personal_msg' => Database::EscapeString((string)$xml->AboutMe),
                      'level' => (int)$xml->Level,
                      'progress' => (int)$xml->Progress,
                      'trophies_total' => (int)$xml->Trophies->Total,
                      'trophies_platinum' => (int)$xml->Trophies->Platinum,
                      'trophies_gold' => (int)$xml->Trophies->Gold,
                      'trophies_silver' => (int)$xml->Trophies->Silver,
                      'trophies_bronze' => (int)$xml->Trophies->Bronze,
                      'country' => Database::EscapeString((string)$xml->Country->Culture),
                      'is_plus' => (string)$xml->Plus,
                      'points' => (int)$xml->LevelData->Points,
                      'floor' => (int)$xml->LevelData->Floor,
                      'ceiling' => (int)$xml->LevelData->Ceiling,
                      'game_completion' => (double)$xml->GameCompletion,
                      'background_color' => ((int)$xml->Background->R << 16) | ((int)$xml->Background->G << 8) | ((int)$xml->Background->B),
                      'jid' => (string)$xml->jid
                      );

        Insert('profiles', $pair);

クエリに含まれるデータが正しくありません。

INSERT INTO profiles(, , , , , , , , , , , , , , , , , , , )VALUES('', 'AlmamuPP', 'http://static-resource.np.community.playstation.net/avatar/3RD/30004.png', 'EVE Online & DUST fan', 2, 17, 12, 0, 0, 6, 6, 'ES', 'false', 270, 200, 600, 12.5, 458759, 'AlmamuPP@a4.es.np.playstation.net')

お気づきかもしれませんが、辞書内のすべてのキーを無視するだけですが、面白いことに、

echo $key;

foreachには、キーが適切に印刷されています...そこで何が起こっているのか、そしてそれを修正する方法について何か考えはありますか?

4

1 に答える 1

3

括弧がありません:

$header .= $key . (($cur < $count) ? ', ' : ' ');

このように動作します。

于 2013-02-11T18:31:51.147 に答える