Üç şey:
Bu sorguları yazıyoruz yolu okumak biraz zor. Şahsen ben bir multi-line (aşağıda başına) heredoc sözdizimi kullanmayı tercih, ama bu kesinlikle gerekli değildir;
Herhangi bir kullanıcı girişi mysql_real_escape_string()
to avoid SQL injection saldırılara geçmesi gerekir. Note: "kullanıcı girişi" anything O vb çerezleri, form alanları (normal veya gizli), sorgu dizeleri dahil müşteri gelir içerir; ve
Sen koymak LIMIT 0,5
değil LIMIT 0,"5"
, yani muhtemelen sorunun kaynağı olan LIMIT
fıkra, ikinci argüman alıntı gerekmez.
Yani deneyin:
$title = mysql_real_escape_string($_GET['title']);
$author = mysql_real_escape_string($_GET['author']);
$limit = (int)$_GET['limit'];
$query = <<<END
SELECT *
FROM #__chronoforms_UploadAuthor
WHERE text_6 LIKE "$title%"
AND text_7 LIKE "%$author%"
LIMIT 0,$limit
END;
Ayrıca, bir commentor bu %
ve _
kaçan not edilmelidir. Bu olabilir ya da doğru olmayabilir. Birçok uygulama kullanıcı joker girmek için izin verir. Bu durum buysa, o zaman bunları kaçmak gerekir. Bunları kaçmak gerekiyorsa bunları işlemek:
$title = like_escape($limit);
function like_escape($str) {
return preg_replace('!(?|\\)((?:\\)*)([%_])!', '$1\$2', $str);
}
Bu biraz karmaşık düzenli ifade birisi '\'% koyarak ve ardından ters eğik çizgi kaçış değil, '%', hangi '\%' alma durdurmaya çalışıyor.