如何使用Like%运算符避免SQL查询中的SQL注入。仅php mysql

如何使用Like%运算符避免SQL查询中的SQL注入。仅php mysql,php,mysql,security,Php,Mysql,Security,如何避免在SQL查询中仅对PHP和Mysql使用Like运算符进行SQL注入? 这可以使用字符串函数来完成吗 或者有人能告诉我应该怎么做来防止像%operator这样的攻击吗?你可以使用mysql\u real\u escape\u string对字符串进行转义,然后添加%通配符。你可以使用mysql\u real\u escape\u string对字符串进行转义,然后添加%通配符。当你按如下方式运行查询: mysql_query("SELECT field FROM table WHERE

如何避免在SQL查询中仅对PHP和Mysql使用Like运算符进行SQL注入? 这可以使用字符串函数来完成吗


或者有人能告诉我应该怎么做来防止像%operator这样的攻击吗?

你可以使用
mysql\u real\u escape\u string
对字符串进行转义,然后添加
%
通配符。

你可以使用
mysql\u real\u escape\u string
对字符串进行转义,然后添加
%
通配符。

当你按如下方式运行查询:

mysql_query("SELECT field FROM table WHERE field2 LIKE '%".mysql_real_escape_string($yourVar)."%'");

运行查询时,请使用以下命令:

mysql_query("SELECT field FROM table WHERE field2 LIKE '%".mysql_real_escape_string($yourVar)."%'");

你可以做一些事情来保证它的安全。 首先,您必须确定要搜索的数据类型:数字、字符串等

我建议使用PHP的PDO库,准备查询并根据您应该接收的数据类型绑定值。
下面是一个示例,其中接收的数据应为字符串。请注意
PARAM_STR

...

$value = "apple";

$sth = $dbh->prepare('SELECT name FROM fruit WHERE type LIKE :something');
$sth->bindParam(':something', '%'.$something.'%', PDO::PARAM_STR);
$sth->execute();

...

你可以做一些事情来保证它的安全。 首先,您必须确定要搜索的数据类型:数字、字符串等

我建议使用PHP的PDO库,准备查询并根据您应该接收的数据类型绑定值。
下面是一个示例,其中接收的数据应为字符串。请注意
PARAM_STR

...

$value = "apple";

$sth = $dbh->prepare('SELECT name FROM fruit WHERE type LIKE :something');
$sth->bindParam(':something', '%'.$something.'%', PDO::PARAM_STR);
$sth->execute();

...

使用顶部的类似“%SEARCH%”的条。就我个人而言,我使用的是CodeIgniter这样的框架,它不需要担心太多的样板文件和安全问题,我再也不会梦想从头开始使用php了。只是一个建议。实际上我的问题是,如何防止用户使用像%。。。他可以使用like%子句执行sql注入,如何防止这种攻击..使用顶部的like“%SEARCH%”栏。我个人使用的是CodeIgniter这样的框架,它不太需要担心样板文件+安全问题,我不会再梦想从头开始使用php。只是一个建议。实际上我的问题是,如何防止用户使用像%。。。他可以使用like%子句执行sql注入,如何防止这种攻击。您甚至可以转义整个字符串,包括
%
——它们对转义没有特殊意义。我没想到。哦,好吧。。要转义的字符串中少了一个(或两个)字符。每年可以为你节省一纳秒的时间减去串接字符串的时间:p但是,是的,这真的不重要。无论如何,您都需要串接,因为搜索字符串是用户输入的。:)您可以在查询中已经包含通配符,这实际上会保存一个concatation您甚至可以转义整个字符串,包括
%
——它们对转义没有特殊意义。我没想到。哦,好吧。。要转义的字符串中少了一个(或两个)字符。每年可以为你节省一纳秒的时间减去串接字符串的时间:p但是,是的,这真的不重要。无论如何,您都需要串接,因为搜索字符串是用户输入的。:)您可以在查询中已经包含通配符,这实际上会保存一个concatation