पहली चीज़ जो मैं देख सकता हूँ वह है आपका sprintf()
दो प्रतिस्थापन पैरामीटर हैं लेकिन केवल एक प्लेसहोल्डर है। मुझे लगता है कि आपका मतलब वास्तव में था
$updateSQL = sprintf ("UPDATE Leads SET Notes = CONCAT_WS('\n', Notes, %s) WHERE Id=%d",
GetSQLValueString($_POST['note'], "text"),
GetSQLValueString($_POST['Id'], "int"));
साथ ही, आपका GetSQLValueString()
फ़ंक्शन स्वचालित रूप से "टेक्स्ट" पैरामीटर को उद्धरणों के साथ लपेटता है, इसलिए आपको प्लेसहोल्डर के आसपास के उद्धरणों को निकालना होगा।
मैंने आईडी प्लेसहोल्डर को भी %d
. में बदल दिया है जैसा कि मुझे लगता है कि आप एक संख्या की अपेक्षा कर रहे हैं।
विकास के लिए त्रुटि रिपोर्टिंग सक्षम करने से आपको लाभ हो सकता है। यह त्रुटि (और संभावित रूप से अपरिभाषित $Notes
. के संबंध में एक और त्रुटि वेरिएबल) ने डिबगिंग को आसान बना दिया होगा।
इसे अपनी स्क्रिप्ट के शीर्ष पर रखें (केवल विकास के लिए)
ini_set('display_errors', 'On');
error_reporting(E_ALL);
व्यक्तिगत धर्मयुद्ध
MySQL लाइब्रेरी को छोड़ दें और अपना कोड PDO में ले जाएं, आप पीछे मुड़कर नहीं देखेंगे।
$stmt = $db->prepare('UPDATE Leads SET Notes = CONCAT_WS(:sep, Notes, :note) WHERE Id = :id');
$stmt->execute(array(
'sep' => PHP_EOL,
'note' => $_POST['note'],
'id' => $_POST['Id']
));
बेहतर तरीका
माता-पिता "लीड" और निर्माण टाइमस्टैम्प के साथ एक विदेशी कुंजी संबंध के साथ प्रत्येक नोट प्रविष्टि को एक अलग तालिका में संग्रहीत करने पर विचार करें। इस तरह, आप बस सभी चाइल्ड नोट प्रविष्टियों को सृजन क्रम में पुनः प्राप्त कर सकते हैं और नई प्रविष्टियाँ बस सम्मिलित कर दी जाती हैं।
CREATE TABLE LeadNotes (
id INT NOT NULL AUTO_INCREMENT,
lead_id INT,
note TEXT,
created_dt TIMESTAMP,
PRIMARY KEY (id),
FOREIGN KEY (lead_id) REFERENCES Leads (Id)
ON DELETE CASCADE
) ENGINE=INNODB;