Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

संग्रहीत प्रक्रियाओं का उपयोग करना:mysqli-> क्वेरी में अलग-अलग परिणाम (CALL select_procedure) VS mysqli-> क्वेरी (चुनें ...)

तैयार विवरण पर विचार करें concat() जैसा कि वे अक्सर होते हैं।

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 ;

आपकी संग्रहीत खरीद के पास काम करने का कोई मौका नहीं था क्योंकि यह आपके पैरामीटर का उपयोग भी नहीं कर रहा था। आपने जो किया वह एक स्ट्रिंग अक्षर के अंदर कुछ दफन कर रहा था। इसके अलावा, varchar(124) थोड़ा अजीब है :p

केवल सफलता के बारे में लोगों को तैयार बयानों के साथ एक उपयोगकर्ता चर का उपयोग करना है (@ . के साथ) ) बनाम स्थानीय चर का उपयोग करने के असफल प्रयास (DECLARE से)। तो, यह आपको भविष्य में कुछ घंटों के सिर पीटने से बचा सकता है।

PHP मैनुअल पेज से संग्रहित प्रक्रियाएं :

संग्रहीत प्रो को mysqli . से कॉल करने के लिए , कृपया उत्तर पर एक नज़र डालें पाब्लो टोबार से। यह कई चर के साथ विशेष रूप से सुखद नहीं दिखता है, लेकिन ऐसा लगता है कि यह कहां है। स्पॉयलर अलर्ट:mysql वैरिएबल का उपयोग करें, PHP वेरिएबल का नहीं।

माना, पाब्लो एक परिणाम सेट नहीं लौटा रहा था, बल्कि एक OUT . पर लिख रहा था संग्रहित प्रो में var। शायद आपको वही करना होगा जो उसने IN . के लिए किया था पैरामीटर, और कॉल करें multi_query() , फिर एक store_result() , फिर एक fetch_all() (संक्षेप में, PHP एक पृष्ठ को ऊपर संदर्भित करता है)।

वैकल्पिक रूप से, पैलेडियम यहां द्वारा किए गए कॉल के अनुसार कॉल किया जाएगा। ।

किसी भी मामले में, SQL इंजेक्शन पास करने की ज्ञात भेद्यता से बचने के लिए मामला लिया जाना चाहिए संग्रहीत कार्यविधि दिनचर्या पर।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. समय से निपटना और आधी रात के बाद

  2. DriverManager कोई उपयुक्त ड्राइवर नहीं mysql

  3. हाइबरनेट ऑटो डेटाबेस बनाएँ

  4. एक क्वेरी के परिणाम के साथ एक कॉलम में डुप्लिकेट मानों की संख्या प्राप्त करें

  5. मैक ओएसएक्स पर एमएएमपी का उपयोग करते समय मैं mysql.sock खोजने और MySQL को पहचानने के लिए केकपीएचपी सेंकना कैसे प्राप्त करूं?