PHP veritabanı için mukadder kullanıcı girdileri

7 Cevap php

Bu kodu vardır:

$query = "select id from votes where username = '$user' and article_id  = $this->id";

Bunu sterilize için bu kodu çalıştı:

$query = sprintf("select id from votes where username = '$user' and article_id = $this->id", 
    mysql_real_escape_string($user), 
    mysql_real_escape_string($password));

ama ben mysql_real_escape hatları için bu hatayı alıyorum:

Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Access denied for user 'mexautos'@'localhost' (using password: NO) in /home/mexautos/public_html/kiubbo/data/article.php on line 145 Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: A link to the server could not be established in /home/mexautos/public_html/kiubbo/data/article.php on line 145 Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Access denied for user 'mexautos'@'localhost' (using password: NO) in /home/mexautos/public_html/kiubbo/data/article.php on line 146 Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: A link to the server could not be established in /home/mexautos/public_html/kiubbo/data/article.php on line 146

Burada kullanıcı adı olsun, eğer ben bilmiyorum onun yeterince güvenlidir:

function getUsername(){ return $this->username; }

Thx

7 Cevap

I prepared statements Bunun için yerine sprintf kullanmanızı öneririm

Eğer mysql_real_escape_string kullanmadan önce bir mysql bağlantısı gerekir.

Bu soruna neden budur, ama ben senin sprintf açıklamada değişkenler '$ user' ve '$ this-> id' olmamalı inanıyorum, ama '% s' olmalıdır eğer emin değil

http://us2.php.net/sprintf

Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Access denied for user 'mexautos'@'localhost' (using password: NO)

Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: A link to the server could not be established

Did you check the link ? Is it active ? You need to be connected before to use mysql_real_escape_string() Don't you forget to set the password ?

Deneyin:

mysql -u mexautos -p

(Tip girin eğer şifre yok)

Ayrıca, sprintf() fonksiyonunu kontrol, sizin değişken bağlamak için% s kullanmak gerekir

$a = 'Foo';
$b = 'Bar';
$foo = sprintf('Foo Bar %s %s', $a, $b);

Bunu santitize yardımcı sunucunun kodlama türünü kullanması nedeniyle mysql_real_escape_string () kullanmak için bir bağlantı gerekir.

Ayrıca sprintf () böyle bir şey görünmelidir

$query = sprintf("SELECT id FROM votes WHERE username = '%s' and article_id = %d", 
    mysql_real_escape_string($user), 
    mysql_real_escape_string($password));

I Zend_Db (Orada bunların ton vardır) gibi olgun DB soyutlama katmanı kullanmanızı tavsiye ediyorum. Kendi homebrew çözüm uygulayan bir üretim sistemi için tavsiye ederim bir şey değildir.

Diğer Dediğim gibi, '$ user' ama '% s' ve açık bir bağlantı gerekmez.

@Tomalak sprintf is faster - that's the reason why to use it - it is a native C function.