Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php PDO查询中的Get参数是否危险?_Php_Mysql_Pdo - Fatal编程技术网

Php PDO查询中的Get参数是否危险?

Php PDO查询中的Get参数是否危险?,php,mysql,pdo,Php,Mysql,Pdo,我在pdo查询中使用了5个get搜索参数。所以,我想知道这是否危险 例如: $s_username = ""; if(isset($_GET["username"])){ $s_username = " AND ac_username LIKE %".$_GET["username"]."% "; } $appUsers = $db->query("SELECT ac_user FROM accounts WHERE ac_app = '{$appF

我在pdo查询中使用了5个get搜索参数。所以,我想知道这是否危险

例如:

$s_username = "";

   if(isset($_GET["username"])){
      $s_username = " AND ac_username LIKE %".$_GET["username"]."% ";
   }

      $appUsers = $db->query("SELECT ac_user FROM accounts WHERE ac_app = '{$appFind["id"]}' '{$s_username}' ")->fetchAll(PDO::FETCH_ASSOC);
(我知道,有一个例子,我可以使用其他技术,但这只是一个简单的例子。因此,我使用了更多的搜索词或参数。)


如果真的很危险,你能给我推荐一些替代品吗?

是的,绝对危险。你对我敞开心扉。使用预先准备好的语句而不是直接连接。谢谢!但是我不能使用,因为我正在添加“AND-columnname-LIKE..”文本。还有别的办法吗?是的,你可以。在将占位符传递到准备好的语句之前,只需将占位符添加到变量中。换句话说,有一个像
。。。哪里像,并传递一个类似于
“%”的值$x.“%”
而不仅仅是
$x
。您必须执行类似
$s_username=“和ac_username like?”,然后使用准备好的语句而不是直接查询。将参数传递给语句处理程序时,不要传递它
$\u GET[“username”]
,而是传递它
'%$_获取[“用户名”].%'。如果不知道
$db
是什么(它是PDO类的一个实例,还是某种包装器?),很难提供比这更多的细节,但这应该足以帮助您解决问题。是的,这会起作用。只需确保
$appFind[“id”]
不能包含任何用户输入。通常,您希望尽可能对所有变量值使用准备好的语句和占位符。当不可能时(例如表名,不能是参数),使用白名单值。