私はいくつかのデータベース関数に取り組んでおり、何らかの理由で、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には、キーが適切に印刷されています...そこで何が起こっているのか、そしてそれを修正する方法について何か考えはありますか?