ne bu sql sorgu ile yanlış?

8 Cevap php

Tamam ben PHP iki değişkene sahip

$username;
$password;

$ _POST değişkeni alınan verilere başlatıldı hangi :)

Ben bu SQL sorgusu

$sql = "SELECT * FROM users WHERE username = '" . $username . "' AND password = '" . $password . "')";

Ama bu işleri yapar ve bana hiçbir şey döndürür: (

Eğer doğru yönde bana talimat verebilir. Lütfen?

8 Cevap

Sorgu sebepsiz ucunda bir kapanış parantezi var, bu iş olmaz.

Bunun nesi yanlış?

Her şey, ne yazık ki. Özellikle SQL injection saldırılarına açık bulunuyor.

Bu aynen cut & paste ise, o zaman aslında çalışmıyor nedeni sonunda bir ayraç olduğunu. Aradığınızda muhtemelen hatalar için kontrol etmiyorsunuz?

Baz MySQL API kullanarak bu olmalıdır:

$sth = $db->prepare("SELECT COUNT(*) FROM users WHERE username = ? AND password = ?");
$sth->execute($username, $password);
list($count) = $sth->fetchrow();
$authorized = ($count > 0);

veya benzeri (kod denenmemiş, E & OE, vs ..)

Neden sokak senin sorgunun sonunda) var mı? Bu olmamalıdır.

Oh, ve SQL enjeksiyon thirded. KÖTÜ.

Her şeyden önce, ever bunu böyle yapmam. Hakkında okumak SQL injection ve ne diyor anlamış kadar herhangi bir SQL yazmayın lütfen. Üzgünüm, ama bu gerçekten önemlidir.

Bu sorgu, bir kapanış ayraç, dedi. Bu bir yazım hatası gibi görünüyor. Bunu yürütülürken bir hata alıyorum?

Sorgunun sağ tarafta ekstra bir parantez var.

Eğer düzgün kodunuzu dezenfekte yoksa Ayrıca, SQL enjeksiyon savunmasız olacaksın. Eğer gerçekten parametreli sorguları kullanarak, ama en azından kullanım mysql_real_escape_string() on $username ve $password yerine. Olmalıdır

Ayrıca, hayalet hata ayıklama bir bit olarak, bu düz metin olarak saklayabilirsiniz asla beri şifreleri MD5, veritabanında karma olması çok mümkündür.

Deneyin:

$username = mysql_real_escape_string($_POST["username"]);
$password = md5($_POST["password"]);

$sql = "SELECT * FROM users WHERE username = '$username' AND password = '$password'";

Eğer sorgu dizesinin sonunda aşırı kapanış parantezi var gibi görünüyor.

[Düzenle] - O çığlık SQL enjeksiyon saldırıları için: Biz kullanıcı sorguda bunları kullanmadan önce kendi değişkenleri ile ne yaptığını bilmiyorum. Nasıl şüphe parası hakkında? ;-)

Tüm diğer sorunların yanı sıra kaydetti. Kullanıcılar tablosunda Şifre kaydedilmiş şifrelenir. Eğer MySQL şifre şifreleyicisine yoluyla Parola çalıştırmak sürece şifreleri maç olmayacak gibi, bu sorgudan verileri görmek asla.