Neden arama alışkanlık rafine?

5 Cevap php

Ben bu kod biraz var:

//Restrict the SQL query with an AND clause if a member has been selected
if ($form_member_id != 0) {
	$query .= "AND photos.member_id = '$form_member_id' ";
}

Sadece seçilen kullanıcı aşağı bir arama sorgusu rafine demek, yani bütün sorgu birlikte okur:

SELECT
photos.photo_id, members.member_name, photos.photo_title, photos.photo_film, photos.photo_height, photos.photo_width
FROM members, photos
WHERE members.member_id = photos.member_id
    AND photos.member_id = '$form_member_id'

Nedense bu ive sorguyu test edilmiş ve gayet iyi çalışıyor, çalışmıyor, ama nedense alışkanlık yazılı kod ive ile çalışır. Ben değişkenlerin isimleri farkı için teslim ettik ama onun değil çalışma neden .... Herkes biliyor hepsi aynı!

5 Cevap

Ben size daha önce bir boşluk gerektiğini düşünüyorum VE aksi takdirde olacak:

WHERE members.member_id = photos.member_idAND photos.member_id = '$form_member_id'

yerine

WHERE members.member_id = photos.member_id AND photos.member_id = '$form_member_id'

Ditto Matta @ ne parametreli sorgular kullanma hakkında söylüyor, ama ben yine de yukarıda sorun olduğunu düşünüyorum.

Bariz adım elle çalıştırmak sonra, çalıştırmadan önce tam sorgu yazdırmak ve neler olacağını görmek için. Ayrıca, kullandığınız olmalıdır prepared statements.

kullanarak komut dosyası hata ayıklama

if ($form_member_id != 0) {
        $query .= "AND photos.member_id = '$form_member_id' ";
        die($query);
}

kopyalamak ve sorguyu yapıştırın ve hata kaynağını anlamaya phymyadmin veya vb çalıştırın

Daha iyi güvenlik için, bunu bu gibi olmak isteyebilirsiniz

if ($form_member_id != 0) {
        $query .= "AND photos.member_id = '" . mysql_real_escape_string($form_member_id) . "' ";
}

Eğer sorun gibi görünüyor görmek için onun çalışma şimdi eğer sorguyu yankı gerekir :)

Bir başka şey, ve ben php ile deneyimli, ancak kod SQL enjeksiyon saldırıları için ana-hedef görünüyor değilim ...

Birisi "$form_member_id" için tampon malzeme ve benzeri bir değer koyabilirsiniz

'; truncate members; '

baştaki ve sondaki alıntı ... 'ilk sunulan dize parçası nerede; , sizin dize sonlandırılacak; Bir deyimi sonlandırmak ve sonra tablo kesecek ve kalanı görmezden ...

Yine, ben bir PHP kişi değilim, ama pek çok diğer tarihsel güvenlik ilanları gibi enjeksiyon saldırıları önlemek için sorguları parameterizing hakkında konuşmak