Kakao app MySQL veritabanı getir - PHP köprüleme

2 Cevap php

I'm trying to download a range of rows from my MySql database, through a cocoa app that I'm developing. I use a php that receives an index from my app and sends back all the rows up to that index. My cocoa code is:

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 değişkeni aldığınızda index bu kod çalışır:

$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 kadar index satırları ve veritabanı son kimliği varsa bu tüm çalışıyor! Kakao kodundan, ben set, eğer index 30 satır kadar istemek için ya da ben ... (tüm veritabanı istemek için) index sıfıra ayarlanmış {[(3) }] nesne hiçbir şey içerir!

Ben yanlış ne yapıyorum?

2 Cevap

I'm sorry! I've solved by myself! There was an encoding issue! Just changed:

utf8_encode($row[$key])

ve ben sorunu çözdük!

Bu sorunuza cevap vermez, ancak kod bir SQL Injection saldırısı için geniş açıktır. Bunu düzeltmek için yolu çok basit sprintf olduğunu:

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

Kötü niyetli bir kullanıcı $ indeks değişkeni metin enjekte etmeye çalışır Şimdi, eğer, o zaman intval + sprintf kombinasyonu sadece böylece db korumak, sayı 0 haline dönecek.