Php 真的在和CONCAT_WS抗争。。。请帮助一个新手:)
PHP和MYSQL新手…现在真的需要你的帮助。我在脚本中实现了一个子模式,最后让它将“用户注释”提交到数据库中。不幸的是,每次新提交的文本都会覆盖上一次提交的文本。我被告知使用CONCAT_WS来防止这种情况发生……我在Dreamweaver上已经尝试了几个小时来实现这一点,但它不起作用。这是我那部分的代码 出现此错误的新代码:Php 真的在和CONCAT_WS抗争。。。请帮助一个新手:),php,jquery,mysql,concatenation,Php,Jquery,Mysql,Concatenation,PHP和MYSQL新手…现在真的需要你的帮助。我在脚本中实现了一个子模式,最后让它将“用户注释”提交到数据库中。不幸的是,每次新提交的文本都会覆盖上一次提交的文本。我被告知使用CONCAT_WS来防止这种情况发生……我在Dreamweaver上已经尝试了几个小时来实现这一点,但它不起作用。这是我那部分的代码 出现此错误的新代码: You have an error in your SQL syntax; check the manual that corresponds to your MySQ
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
ini_set('display_errors', 'On');
error_reporting(E_ALL);
?>
<?php require_once('Connections/cms.php'); ?>
<?php
if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "")
{
if (PHP_VERSION < 6) {
$theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
}
$theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) :
mysql_escape_string($theValue);
switch ($theType) {
case "text":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "long":
case "int":
$theValue = ($theValue != "") ? intval($theValue) : "NULL";
break;
case "double":
$theValue = ($theValue != "") ? doubleval($theValue) : "NULL";
break;
case "date":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "defined":
$theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
break;
}
return $theValue;
}
}
$editFormAction = $_SERVER['PHP_SELF'];
if (isset($_SERVER['QUERY_STRING'])) {
$editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);
}
if ((isset($_POST["MM_update"])) && ($_POST["MM_update"] == "lead_note_form")) {
$updateSQL = sprintf ("UPDATE Leads SET Notes = CONCAT_WS('\n', notes, '%s') WHERE Id=%d",
GetSQLValueString($_POST['note'], "text"),
GetSQLValueString($_POST['Id'], "int"));
mysql_select_db($database_cms, $cms);
$Result1 = mysql_query($updateSQL, $cms) or die(mysql_error());
$updateGoTo = "test6.php";
if (isset($_SERVER['QUERY_STRING'])) {
$updateGoTo .= (strpos($updateGoTo, '?')) ? "&" : "?";
$updateGoTo .= $_SERVER['QUERY_STRING'];
}
header(sprintf("Location: %s", $updateGoTo));
}
$colname_Recordset1 = "-1";
(isset($_GET['Id'])) {
$colname_Recordset1 = $_GET['Id'];
}
mysql_select_db($database_cms, $cms);
$query_Recordset1 = sprintf("SELECT Id, First_Name, Last_Name, Notes FROM Leads WHERE Id = %s",
GetSQLValueString($colname_Recordset1, "int"));
$Recordset1 = mysql_query($query_Recordset1, $cms) or die(mysql_error());
$row_Recordset1 = mysql_fetch_assoc($Recordset1);
$totalRows_Recordset1 = mysql_num_rows($Recordset1);
?>
函数clickSubmit(){
$(“表格”)。提交();
}
添加注释:
我能看到的第一件事是您的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
变量有关的另一个错误)会使调试更容易
将其放在脚本顶部(仅用于开发)
个人征战
删除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;
谢谢你的快速回复!我想做的是,使用子模式在点击“notes”图像时弹出,我让它工作到可以从中提交数据,也可以从它的顶部查看它。它的工作方式是,顶部应该从mysql检索以前的注释。我遇到的问题是,当我向DB提交文本时,它会存储文本,然后用新的文本覆盖上一次提交的文本…抱歉,希望这不是太混乱…我也尝试了代码,当我的子模式弹出时,我收到了提交的原始注释,并且“NULL”..@Alex我已经用我认为更好的方法更新了我的答案你认为这是更好的方法吗?我们有很多客户机,输入了很多注释…我尝试了前面的代码,这就是它给我的…注意:未定义变量:第46行的/home/content/02/8116402/html/test5.php中的db致命错误:在第46行的/home/content/02/8116402/html/test5.php中对非对象调用成员函数prepare()。。。。谢谢你的帮助和耐心,我已经为此奋斗了一整天@如果是这样,我想这是你必须做的。我还建议您阅读PHP手册中的。我的代码只是一个例子,作为您已经拥有的东西的替代品。好的,我一定会这么做。非常感谢。你知道这个错误是什么意思吗,当我输入你的初始代码时,它在某种程度上起作用了,但唯一存储的东西是“NULL”,它们彼此叠加在一起,这就是我想要的,它会把它带回我的子模式。。。但它只是“空的”。。。这是我得到的一个错误代码:
$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;