在PHP中,如何创建包含引号和撇号的mySQL选择查询?

Jer*_*owe 6 php mysql escaping quoting

我正在使用mysql_real_escape_string将数据存入我的数据库而没有任何问题.

所以数据库中的条目可能是:

1/4" Steve's lugnuts
Run Code Online (Sandbox Code Playgroud)

所以这完全在数据库中.
现在我想搜索那个确切的东西.但是,它会陷入"或者"(我已经尝试了很多东西,它总是在某处弄乱).

这就是我现在拥有的:( 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>";
Run Code Online (Sandbox Code Playgroud)

但问题是,我似乎无法得到任何错误.
搜索字段(应该填充它们已经放入的内容)只有:

1/4\" Steve\
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

You*_*nse 5

搜索字段(应该填充它们已经放入的内容)就是这样 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>";
Run Code Online (Sandbox Code Playgroud)

还要注意,回复这么大的HTML块是没有用的.只需关闭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>
Run Code Online (Sandbox Code Playgroud)

看起来更清晰,可读和方便