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

menggunakan PROSEDUR TERSIMPAN:hasil berbeda di mysqli->query(CALL select_procedure) VS mysqli->query(SELECT ...)

pertimbangkan Pernyataan yang Disiapkan digunakan dengan concat() seperti yang sering terjadi.

DROP PROCEDURE if exists myStoredProc101;
DELIMITER $$
CREATE PROCEDURE myStoredProc101
(   pSanitized VARCHAR(124)
)
BEGIN
    set @mySql:=concat("SELECT DISTINCT ID FROM user where match(name) against ('* *",pSanitized,"* *')");
    PREPARE stmt1 FROM @mySql;
    EXECUTE stmt1;
    DEALLOCATE PREPARE stmt1;
END 
$$
DELIMITER ;

Proc Anda yang tersimpan tidak memiliki peluang untuk berfungsi karena bahkan tidak menggunakan parameter Anda. Apa yang Anda lakukan adalah mengubur sesuatu di dalam string literal. Juga, varchar (124) agak aneh :p

Tentang satu-satunya keberhasilan yang dimiliki orang dengan pernyataan yang disiapkan adalah dengan menggunakan Variabel Pengguna (dengan @ ) versus upaya gagal menggunakan Variabel Lokal (dari DECLARE). Jadi, hal itu dapat menghemat beberapa jam untuk membenturkan kepala di masa mendatang.

Dari Halaman Manual PHP Prosedur Tersimpan :

Adapun memanggil proc yang disimpan dari mysqli , silakan lihat Jawaban dari Pablo Tobar. Itu tidak terlihat sangat menyenangkan dengan banyak variabel, tetapi tampaknya itulah tempatnya. Peringatan Spoiler:gunakan variabel mysql, bukan variabel PHP.

Memang, Pablo tidak mengembalikan hasil, melainkan menulis ke OUT var dalam proc yang disimpan. Mungkin Anda perlu melakukan apa yang dia lakukan untuk IN parameter, dan panggil multi_query() , lalu store_result() , lalu fetch_all() (singkatnya, PHP mereferensikan halaman ke atas).

Atau, panggilan akan dilakukan seperti yang dilakukan oleh Palladium di sini .

Dalam kedua kasus, kasus harus diambil untuk menghindari kerentanan yang diketahui dari melewati SQL Injection ke rutinitas prosedur tersimpan.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mengapa angka dilompati di kunci utama kenaikan otomatis saya?

  2. mysql:pisahkan nilai varchar dan masukkan bagian

  3. Apa itu indeks?

  4. Bagaimana cara menyusun kueri SQL untuk menemukan objek yang merupakan induk dari dua objek spesifik lainnya?

  5. Bagaimana cara membuat tautan permanen yang didorong oleh basis data?