Bu bunu yapmak için en iyi yolu nedir?
Ben her sorgu, her değer bu yapmalıyım? GET ve POST?
addslashes(mysql_real_escape_string())
overkill?
Eğer mysql_query kullanıyorsanız () o zaman evet, mysql_real_escape_string () en iyi yoldur. Ve evet, size sql deyimi içine karıştırıp her parametre uygulamak zorunda. Örneğin
$query = "
SELECT
x,y,z
FROM
foo
WHERE
a = '". mysql_real_escape_string($_POST['a'], $mysql) . "'
AND b = '". mysql_real_escape_string($_POST['b'], $mysql) . "'
";
Ama aynı zamanda hazırlanmış ifadeleri kullanabilirsiniz, örneğin, pdo modülü ile. Parametreleri sql deyimi dışında transfer edilir ve bu nedenle kaçan gerekmez. (Eğer kaçan veya yanlış charset için / yanlış yaptığını unutmak değil çünkü) Daha güvenli, daha hızlı ve sık sık ifadesine parametreleri karıştırma daha çok sık daha basit. örneğin
$pdo = new PDO('mysql:host=localhost;dbname=test', '..', '..');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $pdo->prepare("
INSERT INTO
foo (x,y,z)
VALUES
(:x,:y,:z)
");
$stmt->bindParam(':x', $x);
$stmt->bindParam(':y', $y);
$stmt->bindParam(':z', $z);
// insert all records (0,0,0) ... (0,1,0) ... (9,9,9)
for($x=0; $x<10; $x++) {
for($y=0; $y<10; $y++) {
for($z=0; $z<10; $z++) {
$stmt->execute();
}
}
}
edit: ve addslashes (mysql_real_escape_string ()) değil, sadece overkill ama aynı zamanda yanlış.
Bir mysql bağlantı zaten mysql_real_escape_string () kullanmak için komut kurulmuş olması gerekir.
Have you tried PDO?
It prevents mysql injection attacks automatically.
$db = new PDO("mysql:host=$dbhost;dbname=$default_dbname", $dbusername, $dbuserpassword);
$st = $db->prepare ('SELECT * from my_table WHERE owner= ? and dog = ?');
$st->execute (array('Bob', 'Rex'));
$data = $st->fetchAll();
Ama çıkışta htmlentities () kullanmak isteyebilirsiniz.