真的与CONCAT_WS挣扎……请帮助新手:)

这里的PHP和MYSQL新手…..现在可以真正使用你的帮助了。 我在我的脚本中实现了一个Submodal,最后让它将“User Notes”提交到数据库中。 不幸的是,每次提交新文件时,提交的文本都会覆盖之前的提交。 我被告知要使用CONCAT_WS来防止这种情况发生……我已经在Dreamweaver上尝试了几个小时来实现这一目标,但它无法正常工作。 这是我的部分代码……

出现此错误的新代码:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'great'') WHERE Id=35' at line 1 

码…

    <?php if (!function_exists("GetSQLValueString")) { function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") { if (PHP_VERSION  

HTML

      function clickSubmit() { $("form").submit(); }    
<form action="" method="POST" name="lead_note_form" id="lead_note_form" target="_top"> <input type="hidden" name="Id" id="Id" value="" />

Add Note:

我能看到的第一件事是你的sprintf()有两个替换参数,但只有一个占位符。 我在想你的意思

 $updateSQL = sprintf ("UPDATE Leads SET Notes = CONCAT_WS('\n', Notes, %s) WHERE Id=%d", GetSQLValueString($_POST['note'], "text"), GetSQLValueString($_POST['Id'], "int")); 

此外,您的GetSQLValueString()函数会自动用引号包装“text”参数,因此您需要删除占位符周围的引号。

我还将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'] )); 

更好的方法

考虑将每个注释条目存储在一个单独的表中,该表具有与父“Lead”和创建时间戳的外键关系。 这样,您只需按创建顺序检索所有子注释条目,并简单地插入新条目。

 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;