我在 php 页面上遇到 SQL 查询问题。
我对 php 很陌生,所以坚持我。
我已经成功创建了一个查询来选择所有内容,但我想WHERE
在查询中包含一个。问题是结果包含引号,因为它是 html 代码。
我敢肯定这很简单,但任何人都可以帮助...下面的问题代码:
$result = mysql_query("SELECT * FROM myTable WHERE text = '<span class="myclass">Here is my text</span>'");
我在 php 页面上遇到 SQL 查询问题。
我对 php 很陌生,所以坚持我。
我已经成功创建了一个查询来选择所有内容,但我想WHERE
在查询中包含一个。问题是结果包含引号,因为它是 html 代码。
我敢肯定这很简单,但任何人都可以帮助...下面的问题代码:
$result = mysql_query("SELECT * FROM myTable WHERE text = '<span class="myclass">Here is my text</span>'");
转义引号:
$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
不是——但这个话题太高级了,无法在这里讨论)。
您可以使用 . 转义引号\"
。更好:使用mysql(i)_escape_string
. 最佳:将 PDO 与准备好的语句一起使用,让它为您摆脱一切。
以这种方式逃生"
标志:\"
你的代码有很多问题。
您当前的问题与 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);