Điều đầu tiên tôi có thể thấy là sprintf()
của bạn có hai tham số thay thế nhưng chỉ có một trình giữ chỗ. Tôi nghĩ bạn thực sự muốn nói
$updateSQL = sprintf ("UPDATE Leads SET Notes = CONCAT_WS('\n', Notes, %s) WHERE Id=%d",
GetSQLValueString($_POST['note'], "text"),
GetSQLValueString($_POST['Id'], "int"));
Ngoài ra, GetSQLValueString()
của bạn chức năng tự động bao bọc các tham số "văn bản" bằng dấu ngoặc kép, vì vậy bạn cần xóa dấu ngoặc kép xung quanh trình giữ chỗ.
Tôi cũng đã thay đổi trình giữ chỗ ID thành %d
vì tôi cho rằng bạn đang mong đợi một con số.
Bạn có thể được hưởng lợi từ việc bật báo cáo lỗi để phát triển. Lỗi này (và có thể là lỗi khác liên quan đến $Notes
không xác định biến) sẽ giúp gỡ lỗi dễ dàng hơn.
Đặt cái này ở đầu tập lệnh của bạn (chỉ dành cho phát triển)
ini_set('display_errors', 'On');
error_reporting(E_ALL);
Cuộc thập tự chinh cá nhân
Thả thư viện MySQL và chuyển mã của bạn sang PDO, bạn sẽ không nhìn lại.
$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']
));
Phương pháp tiếp cận tốt hơn
Cân nhắc lưu trữ từng mục nhập ghi chú trong một bảng riêng biệt có mối quan hệ khóa ngoại với dấu thời gian tạo và "Khách hàng tiềm năng" chính. Bằng cách đó, bạn chỉ cần truy xuất tất cả các mục nhập ghi chú con theo thứ tự tạo và các mục nhập mới được chèn một cách đơn giản.
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;