0

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

我对 php 很陌生,所以坚持我。

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

我敢肯定这很简单,但任何人都可以帮助...下面的问题代码:

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

4 回答 4

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)。

永远不要在不先转义变量内容的情况下执行带有嵌入变量的 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不是——但这个话题太高级了,无法在这里讨论)。

于 2011-03-12T13:04:59.320 回答
1

您可以使用 . 转义引号\"。更好:使用mysql(i)_escape_string. 最佳:将 PDO 与准备好的语句一起使用,让它为您摆脱一切。

于 2011-03-12T13:05:45.667 回答
0

以这种方式逃生"标志:\"

于 2011-03-12T13:05:38.550 回答
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'";

最后,您的查询运行错误。不要横着写,竖着写。将操作员一个接一个,而不是放在一起。并 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);
于 2011-03-12T13:12:43.333 回答