आप तैयार कथन प्रतिमान के अनुसार, 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