私が最初に見ることができるのはあなたのsprintf()
です 2つの置換パラメーターがありますが、プレースホルダーは1つだけです。私はあなたが実際に意味したと思います
$updateSQL = sprintf ("UPDATE Leads SET Notes = CONCAT_WS('\n', Notes, %s) WHERE Id=%d",
GetSQLValueString($_POST['note'], "text"),
GetSQLValueString($_POST['Id'], "int"));
また、GetSQLValueString()
関数は「テキスト」パラメータを自動的に引用符で囲むため、プレースホルダーの周りの引用符を削除する必要があります。
また、IDプレースホルダーを%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;