Mysql
 sql >> база данни >  >> RDS >> Mysql

Параметризирана заявка с няколко незадължителни думи за търсене

Вече сте защитени срещу sql инжекция, тъй като използвате mysqli_stmt_bind_params, които ще избягат правилно за вас.

Редактиране. Можете да преминете към някаква рамка на база данни, за да имате чист и красив код.

Иначе... това е толкова стар стил на спагети... но ми харесва :D

Доста лесно е да разширите кода си, за да работи с неизвестен брой параметри. Трябва просто да завъртите вашите параметри и в същото време 1. да изградите своя низ за заявка с нотация на въпросителния знак и да добавите вашите параметри към масив, който ще предавате на maxdb_stmt_bind_param ( ресурс $stmt , низ $types , масив и $var ).

Така че би изглеждало така. Предполага се, че има поне ЕДИН параметър (но е тривиално да се избегне това).

$sql = "SELECT * FROM tbl_data WHERE ";
$and = '';
$types = '';
$parameters = array();
foreach($_POST as $k => $v) {
  // check that $k is on your whitelist, if not, skip to the next item
  $sql .= "$and $k = ?";
  $and = " AND ";
  $parameters[] = $v;
  $types .= 's';
}
$stmt_query = mysqli_prepare($db, $sql);
mysqli_stmt_bind_params($stmt_query, $types, $parameters);


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Незаконен микс от съпоставяния за операция „like“, докато търсите с Ignited-Datatables

  2. групирайте по първо и последно появяване

  3. MyISAM срещу InnoDB за бързи вмъквания и композитен уникален ключ

  4. SSH тунел за Python MySQLdb връзка

  5. Крипто валута MySQL типове данни?