使用引号检索结果时出现mySQL问题

时间:2011-03-12 13:03:29

标签: php mysql quotation-marks

我在php页面上遇到SQL查询问题。

我对php很新,所以坚持下去。

我已成功创建了一个查询以选择所有内容,但我想在查询中包含WHERE。问题是结果包含引号,因为它是html代码。

我确信这很简单,但任何人都可以提供帮助......下面的问题代码:

$result = mysql_query("SELECT * FROM myTable WHERE text = '<span class="myclass">Here is my text</span>'");

4 个答案:

答案 0 :(得分:3)

简短回答

转义引号:

$result = mysql_query("SELECT * FROM myTable WHERE text = '<span class=\"myclass\">Here is my text</span>'");

正确答案

您几乎肯定会动态构建此查询(即,字符串<span class=\"myclass\">Here is my text</span>位于变量中,我们称之为$searchTerm)。

不要,EVER,执行带有嵌入变量的SQL查询,而不首先转义变量内容。这不仅可以防止此类问题,还可以防止针对您的应用程序的SQL注入攻击。

假设上面提到的$searchTerm变量,正确的方法是:

$query = sprintf('SELECT * FROM myTable WHERE text = \'%s\'',
                 mysql_real_escape_string($searchTerm));
$result = mysql_query($query);

完全正确答案

使用PHP的PDO扩展,可以轻松访问此功能(读取变量绑定)并且也是100%安全的(mysql_real_escape_string不是 - 但主题是太高级了,无法在这里讨论。)

答案 1 :(得分:1)

您可以使用\"转义引号。更好:使用mysql(i)_escape_string来逃避你的东西。最佳:将PDO与准备好的语句一起使用,让它为您解决所有问题。

答案 2 :(得分:0)

以这种方式转义"\"

答案 3 :(得分:0)

您的代码中存在许多问题。

您当前的问题与SQL无关,但PHP语法相关。正如您从语法高亮显示中看到的那样,双引号会破坏您的字符串。

$sql = "SELECT * FROM myTable WHERE text='<span class="myclass">Here is my text</span>'";

所以,你必须要么转义分隔引号,

$text = "<span class=\"myclass\">Here is my text</span>";

或使用不同的引号

$text = '<span class=\"myclass\">Here is my text</span>';

接下来你的问题与SQL有关。您不能将字符串放入查询中。您必须为查询转义它,然后才将其置于查询中。

$text = '<span class=\"myclass\">Here is my text</span>';
$text = mysql_real_escape_string($text);
$sql = "SELECT * FROM myTable WHERE text='$text'";

最后,您的查询运行错误。不要水平书写,垂直书写。将操作员置于另一个之下,而不是一个粗糙的shange。并且akways检查查询结果以通知所有可能的错误:

$text = '<span class=\"myclass\">Here is my text</span>';
$text = mysql_real_escape_string($text);
$sql  = "SELECT * FROM myTable WHERE text='$text'";
$res  = mysql_query($sql) or trigger_error(mysql_error()." in ".$sql);