我使用 mysql_real_escape_string 毫无问题地将数据导入我的数据库。
因此数据库中的条目可能是:
1/4" Steve's lugnuts
所以这在数据库中是完美的。
现在我想搜索那个确切的东西。但是,它会在 "或 ' 处搞砸(我已经尝试了很多事情,但它总是在某个地方搞砸)。
这是我现在拥有的: (user_input 来自上一页的一个表单)
$user_input=mysql_real_escape_string($_REQUEST['user_input']);
$search_row=mysql_query("SELECT * FROM some_table WHERE some_column LIKE '%$user_input%' ");
while($search = mysql_fetch_array($search_row))
{stuff happens}
echo "<form action='search_results.php' method='post'>";
echo "<input name='user_input' type='text' size='50' value='" . $user_input. "'>";
echo "<input type='submit' value='Lookup Parts' />";
echo "</form>";
但问题是,除了错误,我似乎什么也得不到。
搜索字段(应该填充他们已经输入的内容)只有:
1/4\" Steve\
我做错了什么?
最佳答案
The search field (which is supposed to populate with what they already put in) just has
1/4\" Steve\
当然有!
你放错了你的逃避。
mysql_real_escape_string 仅适用于 SQL!但您正在使用它的 html 结果。而对于 HTML,您必须使用完全不同的转义方式。
所以,做吧
$user_input=mysql_real_escape_string($_REQUEST['user_input']);
$search_row=mysql_query("SELECT * FROM some_table WHERE some_column LIKE '%$user_input%' ");
while($search = mysql_fetch_array($search_row))
{stuff happens}
$user_input =htmlspecialchars($_REQUEST['user_input'],ENT_QUOTES); // here it goes
echo "<form action='search_results.php' method='post'>";
echo "<input name='user_input' type='text' size='50' value='$user_input'>";
echo "<input type='submit' value='Lookup Parts' />";
echo "</form>";
还请注意,回显如此大的 HTML block 是没有用的。只需关闭 PHP 标记,然后编写纯 HTML:
?>
<form action='search_results.php' method='post'>
<input name='user_input' type='text' size='50' value='<?=$user_input?>'>
<input type='submit' value='Lookup Parts' />
</form>
看起来更清晰、可读和方便
关于php - 在 PHP 中,如何创建包含引号和撇号的 mySQL 选择查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7518096/