我在php页面上遇到SQL查询问题。
我对php很新,所以坚持下去。
我已成功创建了一个查询以选择所有内容,但我想在查询中包含WHERE
。问题是结果包含引号,因为它是html代码。
我确信这很简单,但任何人都可以提供帮助......下面的问题代码:
$result = mysql_query("SELECT * FROM myTable WHERE text = '<span class="myclass">Here is my text</span>'");
答案 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);