Tüm MySQL sorguları mysql_real_escape_string?

6 Cevap php

Hem addslashes () ve stripslashes () yerine gerekiyor mysql_real_escape_string mı?

ifadeleri seçmek MySQL üzerine stripslashes yerde kullanmak gibi yani .. Ben de MySQL üzerine form girdi değişkenleri kodlamak için ekler kullanabilirim?

Sincerely, Confused PHP noob

6 Cevap

Eğer kullanıyorsanız düzenli MySQL driver module PHP, o zaman evet, mysql_real_escape_string() gitmek için yoludur. Sen aslında, stripslashes() tamamen addslashes() göz ardı edebilirsiniz.

Sizin sorgu oluşturma, bu gibi bir şey olacaktır:

$sql = "INSERT INTO tbl (x) VALUES '".mysql_real_escape_string($x)."'";

mysql_real_escape_string() sizin sorgu girmeden herhangi bir kullanıcı girişi kullanılmalıdır. Yerleştirmeden önce verilerinizi any other way kaçmak istemiyorum unutmayın. Bir veritabanında HTML parçaları saklarken yaygın hataları olan, addslashes() veya htmlentities() kullanmamalısınız. Sen bunu aldıktan sonra herhangi bir şekilde veri Unescape gerekmez.

Diğer posterleri söz olarak, PDO ve MySQLi gibi PHP için diğer MySQL veritabanı sürücü modülleri vardır. Hem sizin için kaçan kolları sorguları oluşturma alternatif bir yöntem hazırlanan tablolarda, olarak bilinen bir özelliği sunuyor.

I PDO ve prepared statements yerine kullanmanızı öneririz; PDOStatement sınıfına bakın. (Motoru SQL yeniden ayrıştırma yoksa) Hazırlanan tabloları daha verimli olabilir. Onlar da yanlışlıkla (çift-kaçan) db kaçan veri saklamak sizi önlemek gerekir. PDO kullanarak daha kolay other databases desteği eklemek için yapacaktır.

Evet, sizin için tüm backslashing yapmalıyım (mysql sunucu ne olursa olsun charset dayalı)

Evet, MySQL kullanımı için hazırlık dizeleri kaçmak gerekir. Ancak, bu be-tüm sonu tüm kaçınmanın SQL enjeksiyonu değildir. Aslında hala çok sizi savunmasız bırakır.

Daha iyi PHP PDO yerine, parametreli sorgular gitmek için yoludur ;) kullanmak için

I prepared statements kullanmanızı tavsiye ediyorum. Bu şekilde elle her sorgu kaçan güçlük olmaz.

$stmt = $db->prepare("SELECT stuff FROM table WHERE something = ?");
$stmt->execute('s', 'something'); // s means string

Başka bir seçenek bu daha iyi bir versiyonu olan PDO kullanmak, ve genellikle veritabanı bağımsız olmaktır.

http://php.net/manual/en/function.mysql-real-escape-string.php

Sen addslashes() ve stripslashes() kullanmak istemem. Eğer doğru hatırlıyorsam, mysql_real_escape_string() addslashes() daha benzer, ama farklı karakterler kaçar.