Есть ли служба, которая может помочь мне правильно процитировать строки SQL? - PullRequest
0 голосов
/ 02 июня 2009

Мне трудно правильно процитировать строку SQL, я хочу знать, есть ли программа или веб-сайт, которые могут помочь мне правильно процитировать строку. Где я могу ввести строки SQL, веб-сайт проанализирует и процитирует их для меня. Или, может быть, программа .. Мне это нужно, потому что у меня с ними проблемы ..

Извините, что не предоставил подробную информацию о моем вопросе, у меня есть эта строка SQL. Я получил это из книги, но мне трудно цитировать это правильно.

$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']) .
')';

Вы видите, что там происходит много цитат! Я получил это из книги, но когда придет время, когда мне нужно будет разработать собственную строку SQL с такой же трудностью, как это, возможно, я разделюсь.

У вас есть рекомендация, где веб-сайт или программа могут помочь мне избежать / процитировать строки правильно?

Ответы [ 4 ]

5 голосов
/ 02 июня 2009

Можете ли вы быть более конкретным? При написании кода ADO.NET вы обычно используете объект SqlParameter, подобный этому, который автоматически позаботится обо всем этом:

var cmd = new SqlCommand("select * from foo where fooName = @fooName;", connection);
cmd.Parameters.AddWithValue("@fooName", "O'Reilly is a bloviator");
cmd.ExecuteReader();
4 голосов
/ 02 июня 2009

Хорошо, похоже, вы используете PHP. Вы не должны вручную цитировать, а использовать подготовленные заявления. Ниже приведен один из способов сделать это, используя PDO. Другие допустимые синтаксисы приведены в 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();
0 голосов
/ 02 июня 2009

У вас есть рекомендация, где сайт или программа может помочь мне экранировать / правильно цитировать строки?

Вам может не потребоваться экранировать строки в php , если включена настройка с именем magic_quotes_gpc. Вы можете узнать, включен он или нет, написав php-файл со следующим кодом:

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

Это покажет bool (true) или bool (false). Если оно ложно, используйте функцию с именем mysql_real_escape_string для выхода. Если это правда, вам не нужно ничего делать, ваш ввод будет автоматически экранирован. Помните, не делайте и то и другое, вам не хочется убегать дважды. В качестве альтернативы вы можете использовать эту функцию, которая определит, нужно ли вам сбежать или нет:

<?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);
    }
?>

Тогда просто используйте это так:

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

Я не могу проверить код, который я отправил на опечатки, но, надеюсь, ...

0 голосов
/ 02 июня 2009

При написании sql мне больше всего помогает текстовый редактор, который выделяет текст. Есть много дискуссий о том, какой текстовый редактор использовать. Я предпочитаю vi, но я уверен, что emacs сделает то же самое, вместе с eclipse и почти всем, что не является старым блокнотом Windows.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...