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

अमान्य पैरामीटर संख्या:कोई पैरामीटर बाध्य नहीं थे

आप तैयार कथन प्रतिमान के अनुसार, bind_param का उपयोग नहीं कर रहे हैं।

आपके चयन में:

$sql = "SELECT id,msg,time,msg.from,msg.to 
        FROM msg 
        WHERE msg.from IN (?, ?) 
            AND msg.to IN (?, ?)
        ORDER BY time";

$ex = $conn->prepare($sql);
$ex->bind_param("s", $_SESSION["username"]);
$ex->bind_param("s", $_SESSION["tousermessage"]);
$ex->bind_param("s", $_SESSION["username"]);
$ex->bind_param("s", $_SESSION["tousermessage"]);
$ex->execute();

और आपके अपडेट में:

$sql = "UPDATE msg 
        SET readmsg=1 
        WHERE id = ? 
            AND msg = ?";

$ex1 = $conn->prepare($sql);
$ex1->bind_param("i", $result['id']);
$ex1->bind_param("s", $result["msg"]);
$ex1->execute();

उपरोक्त आपके तैयार किए गए कथन को पैरामीटरयुक्त स्ट्रिंग प्रारूप में पैरामीटर स्वीकार करने की अनुमति देता है (पैरामीटर का प्रतिनिधित्व करने के लिए "?" का उपयोग करके), और बाइंड_परम () विधि के माध्यम से प्रकार की जानकारी वाले पैरा को स्वीकार करने की अनुमति देता है।

यह डीबी इंजन को आपकी क्वेरी निष्पादित करने से पहले पैराम को ठीक से डालने और बचने की अनुमति देता है।

यदि आप बाध्यकारी पैरा नहीं कर रहे हैं तो तैयार कथन का उपयोग करने का कोई मतलब नहीं है, शायद यही कारण है कि आपको वह चेतावनी मिल रही है।

एक तरफ ध्यान दें, प्रश्नों का संयोजन (जैसा कि आप ऊपर कर रहे हैं) एक बहुत बुरी आदत है - यह आपको एसक्यूएल इंजेक्शन

तैयार बयानों के बारे में अधिक जानकारी के लिए दस्तावेज़ देखें:

http://php.net/manual/en/mysqli-stmt.prepare .php




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. मैं कैसे जांच सकता हूं कि MySQL तालिका कॉलम भी मौजूद है या नहीं?

  2. एसक्यूएल-सर्वर और MySQL इंटरऑपरेबिलिटी?

  3. सर्वर समय क्षेत्र मान 'CEST' अपरिचित है

  4. एकाधिक MYSQL क्वेरी निष्पादित करने के लिए PHP का उपयोग करना

  5. एक विरासत संरचना के आसपास संबंधों को डिजाइन करना