Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Filter kueri MYSQL dengan opsi formulir

Cobalah. Dari pengujian saya secara lokal (tanpa db) terlihat benar.

$n_req = 0;
$_POST['usuario'] = 'test';
$_POST['resumo'] = 'test2';
$_POST['status'] = 'test3';
if (!empty($_POST['usuario'])) {
$req_usuario = $_POST['usuario'];
$where[] = " usuario = ? ";
$params[] = $req_usuario;
$n_req++;
}
if (!empty($_POST['resumo'])) {
$req_resumo = $_POST['resumo'];
$where[] = " resumo = ? ";
$params[] = $req_resumo;
$n_req++;
}
if (!empty($_POST['status'])) {
    $req_status = $_POST['status'];
$where[] = " status = ? ";
$params[] = $req_status;
$n_req++;
}
$sql_where = !empty($where) ? ' where ' . implode(' and ', $where) : '';
echo $sql_where;
$tot = mysqli_prepare($con, "SELECT * FROM solicitacoes $sql_where");
if(!empty($params)) {
//foreach($params as $param) {
//  mysqli_stmt_bind_param($tot, "s", $param);
    //echo $param;
//}
$params = array_merge(array($tot),
                  array(str_repeat('s', count($params))), 
                  array_values($params));
print_r($params);
call_user_func_array('mysqli_stmt_bind_param', $params);
// adapated from https://stackoverflow.com/questions/793471/use-one-bind-param-with-variable-number-of-input-vars and http://www.pontikis.net/blog/dynamically-bind_param-array-mysqli may need to be altered
}
echo "SELECT * FROM solicitacoes $sql_where";
mysqli_execute($tot);

Jika ketiga nilai diisi, kueri Anda harus

? diisi dengan nilai-nilai oleh driver nanti dalam proses. Ini mencegah pengguna menambahkan kode berbahaya untuk memanipulasi pemrosesan SQL.

https://www.owasp.org/index.php /SQL_Injection_Prevention_Cheat_Sheet#Defense_Option_1:_Prepared_Statements_.28Parameterized_Queries.29
Bagaimana cara mencegah SQL injeksi di PHP?

Saya juga tidak melihat di mana $funcao telah ditetapkan..

Anda dapat mengomentari mysqli fungsi dan decomment baris gema untuk melihat apa yang dilakukan kode. Begitulah cara saya mengonfirmasi bahwa kueri sedang dibangun seperti yang diharapkan.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kurangi beberapa tanggal dan waktu dari tanggal dan waktu saat ini untuk menemukan usia di PHP

  2. PHP mysqli_real_escape_string mengembalikan string kosong

  3. Pengelompokan MySQL berdasarkan minggu, berdasarkan kolom tanggal?

  4. Bisakah kunci asing mereferensikan indeks yang tidak unik?

  5. Catatan SQL Berturut-turut dengan hitungan