2009-07-26 12 views
2

開発中のCocoaアプリケーションを使用してMySqlデータベースから一連の行をダウンロードしようとしています。私は、アプリケーションからインデックスを受け取って、そのインデックスまですべての行を返すPHPを使用します。 マイココアコードは次のとおりです。CocoaアプリケーションからMySqlデータベースを取得する - PHPブリッジ

$index = $_GET['index']; 
$Keys = array(...); 

mysql_connect($Host, $User, $Password) or die("Unable to connect to database"); 
mysql_select_db($Database) or die("Unable to select database"); 


$result = mysql_query("SELECT * FROM transactions where id > $index ORDER BY id"); 

$plist = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"; 
$plist .= "<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n"; 
$plist .= "<plist version=\"1.0\">\n"; 
$plist .= "<array>\n"; 

while($row = mysql_fetch_array($result)) { 
    $plist .= "\t<dict>\n"; 

    foreach($Keys as $key){ 
     $plist .= "\t\t<key>$key</key>\n"; 
     $plist .= "\t\t<string>$row[$key]</string>\n"; 
    } 

    $plist .= "\t</dict>\n"; 
} 

$plist .= "</array>\n"; 
$plist .= "</plist>"; 

echo $plist; 

unset($_GET['index']); 

30のindexからの行と最後のIDまでがある場合は、このすべてが正常に動作します:

NSInteger index = 0; 
NSString *urlString = [NSString stringWithFormat:@"http://localhost/test.php?index=%d&", index]; 

NSArray *items = [NSArray arrayWithContentsOfURL:[NSURL URLWithString: urlString]]; 

NSLog(@"%@", [items description]); 

は、PHPは、このコードを実行GET変数indexを受信した場合のデータベースの!私のココアコードから、indexに最大30行を要求するか、indexを0に設定して(すべてのデータベースを要求するために)... NSArrayオブジェクトには何も含まれていません!

私は間違っていますか?

答えて

0

ごめんなさい!私は自分で解決しました!エンコードの問題がありました。 ちょうど変更:

utf8_encode($row[$key]) 

と私は問題を解決しました!

3

これはあなたの質問には答えませんが、あなたのコードはSQLインジェクション攻撃に対して広く公開されています。悪意のあるユーザーは、それによって、その後、INTVAL + sprintfの組み合わせがちょうど数0にそれを向けるだろう、$インデックス変数にテキストを挿入しようとした場合

$result = mysql_query(sprintf("SELECT * FROM transactions where id > %d ORDER BY id", intval($index)));

、:それを修正する方法は非常に簡単ではsprintfですあなたのデータベースを保護する。

+0

ありがとうございました! – BitDrink

関連する問題