有没有可以帮助我正确引用 SQL 字符串的服务?

Posted

技术标签:

【中文标题】有没有可以帮助我正确引用 SQL 字符串的服务?【英文标题】:Is there a service that can help me Quote the SQL strings properly? 【发布时间】:2009-06-02 02:55:58 【问题描述】:

我很难正确引用 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 字符串时,我会遇到同样的困难,也许我会分开。

您有什么建议可以帮助我正确地转义/引用字符串吗?

【问题讨论】:

您不应手动引用 SQL 查询。相反,使用准备好的语句。 Dave 向您展示了如何为 ADO.NET 执行此操作。其他语言/环境也可以。你在用什么? 【参考方案1】:

你能说得更具体一点吗?在编写 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();

【讨论】:

【参考方案2】:

好的,看起来您正在使用 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();

【讨论】:

谢谢!!很有帮助。我刚开始学习 PDO 和 mysql,所以我对引号感到非常困惑。而我现在正在阅读的这本书还没有达到执行语句。【参考方案3】:

在编写 sql 时对我帮助最大的是一个很好的文本编辑器,它可以突出显示文本。关于使用哪个文本编辑器有很多讨论。我更喜欢 vi,但我很肯定 emacs 也会这样做,还有 eclipse 以及几乎所有不是普通旧 Windows 记事本的东西。

【讨论】:

我正在使用 Textmate,它没有正确的突出显示。突出显示很烂..【参考方案4】:

您有什么建议吗? 网站或程序可以帮助我 正确转义/引用字符串?

如果启用了名为magic_quotes_gpc 的设置,您可能不需要转义in php 中的字符串。您可以通过编写一个包含以下代码的 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'])));
?>

我无法检查我提交的代码是否有错别字,但希望...

【讨论】:

以上是关于有没有可以帮助我正确引用 SQL 字符串的服务?的主要内容,如果未能解决你的问题,请参考以下文章

SQL 引用的字符串未正确终止错误 - Oracle

SQL语句截取字符串中最后的两个字怎么做?急用。在线等。

jsp 引用js路径正确 但显示404错误,求大神帮助!

SQL脚本中的分号问题

有没有办法使用 SQL Server 2012 查找视图中引用的所有无效列?

哎呀!使用保留字来命名列