Bana doğru SQL dizeleri Yap yardımcı olabilecek bir servis var mı?

4 Cevap php

Ben düzgün bir SQL dizesi alıntı bir sabit zaman yaşıyorum, bana doğru dize alıntı yardımcı olabilecek bir program ya da bir web sitesi var bilmek istiyorum. Ben SQL dizeleri girebileceğiniz ardından web sitesi analiz ve benim için bunu teklif edecek. Onlarla bir sorun yaşıyorum çünkü ya da belki bir program .. Ben ihtiyacım var ..

Sorumun hakkında detaylı bilgi sağlamak için değil Üzgünüm, bu SQL dizesi var. Ben bir kitap aldım, ama ben düzgün alıntı bir sabit zaman yaşıyorum.

$sql = "INSERT INTO books(title, author, isbn, publisher, year, summary) VALUES (" .$conn->quote($_POST['title']) .
', ' . $conn->quote($_POST['author']) .
', ' . $conn->quote($_POST['isbn']) .
', ' . $conn->quote($_POST['publisher']) .
', ' . $conn->quote($_POST['year']) .
', ' . $conn->quote($_POST['summary']) .
')';

Orada gerçekleşen birçok tırnak olduğunu görebilirsiniz! Ben bir kitap aldım, ama ben böyle aynı zorluk ile kendi SQL dizesi hazırlamak için gereken bir zaman geldiğinde, belki bölünmüş olacak.

Eğer bir web sitesi veya program bana doğru / quote dizeleri kaçış yardımcı olabilecek bir öneri var mı?

4 Cevap

PHP kullanarak konum gibi, tamam görünüyor. Elle alıntı değil, hazırlanmış ifadeler kullanmak gerekir. Aşağıda PDO kullanarak, bunu yapmak için bir yoludur. Diğer geçerli sözdizimi verilmiştir PDOStatement->execute:

$stmt = $db->prepare("INSERT INTO books(title, author, isbn, publisher, year, summary) VALUES(:title, :author, :isbn, :publisher, :year, :summary)");
$title="Hitchhiker's Guide";
$author="Douglas Adams";
$isbn="0345391802";
$publisher="Del Rey";
$year="1995";
$summary="Arthur Dent accidentally saves the world.";
$stmt->bindParam(":title", $title);
$stmt->bindParam(":author", $author);
$stmt->bindParam(":isbn", $isbn);
$stmt->bindParam(":publisher", $publisher);
$stmt->bindParam(":year", $year);
$stmt->bindParam(":summary", $summary);
$stmt->execute();

Eğer biraz daha spesifik olabilir misiniz? ADO.NET kod yazarken, genellikle otomatik olarak bu şeyler her önemser ki, şöyle bir SqlParameter nesnesi kullanabilirsiniz:

var cmd = new SqlCommand("select * from foo where fooName = @fooName;", connection);
cmd.Parameters.AddWithValue("@fooName", "O'Reilly is a bloviator");
cmd.ExecuteReader();

Sql yazarken beni en çok yardımcı olan şey, metni vurgular iyi bir metin editörü. Kullanmak için hangi metin editörü ile ilgili birçok tartışmalar vardır. Ben vi tercih, ama ben pozitif emacs Tutulma ve sadece düz eski windows not defteri değildir her konuda birlikte de bunu yapardı değilim.

Do you have a recommendation where a website or a program can help me escape/quote the strings properly?

Denilen bir ayar magic_quotes_gpc üzerinde eğer dizeleri in php kaçmak gerek olmayabilir. Bunun içinde bu kod ile bir php dosyası yazarak üzerinde olup olmadığını öğrenebilirsiniz:

<?php
    var_dump(get_magic_quotes_gpc());
?>

Bu bir bool (true) veya bool (false) gösterir. Yanlış ise o zaman mysql_real_escape_string kaçmaya adında bir işlevi kullanın. Bu doğru ise, sizin girişi otomatik olarak kaçtı olacak, bir şey yapmak gerekmez. Her iki yapmayın Unutmayın, iki kez kaçmak istemiyorum. Alternatif Eğer kaçmak ya da gerekiyorsa göreceksiniz bu işlevini kullanabilirsiniz:

<?php
    function clean($input) {
        if (get_magic_quotes_gpc()) {
            // magic quotes are on, no need to escape
            return $input;
        } else {
            // magic quotes are off, we need to escape
            return mysql_real_escape_string($input);
    }
?>

Sonra sadece bu gibi kullanmak:

<?php
    $result = mysql_query(sprintf('SELECT * FROM `table` WHERE user="%s"', clean($_POST['user'])));
?>

Ben umarım yazım hataları için gönderilen ettik ama kodunu kontrol etmek mümkün değilim ...