【发布时间】:2014-05-14 04:17:33
【问题描述】:
昨晚 GD 突然将他们的 MySQL 服务器从版本 4.1 更新到了 5.5。现在,我刚刚意识到将新数据行更新或插入到表中的算法不再起作用。这就是我所拥有的(自 2007 年以来我一直在使用相同的算法,没有任何问题,也许现在有点过时了):
if($error_msg == "")
{
$sql = "UPDATE ".$db_prefix."cars SET
stored='".$_POST['stored_year']."-".$_POST['stored_month']."-".$_POST['stored_day']."',
year='".add_slashes($_POST['year'])."',
model='".add_slashes($_POST['model'])."',
type='".add_slashes($_POST['type'])."',
typemodel='".add_slashes($_POST['typemodel'])."',
bodystyle='".add_slashes($_POST['bodystyle'])."',
engine='".add_slashes($_POST['engine'])."',
trans='".add_slashes($_POST['trans'])."',
drive='".add_slashes($_POST['drive'])."',
color='".add_slashes($_POST['color'])."',
condition='".add_slashes($_POST['condition'])."',
millage='".add_slashes($_POST['millage'])."',
vin='".add_slashes($_POST['vin'])."',
price='".add_slashes(strip_out($_POST['price']))."',
low='".add_slashes(strip_out($_POST['low']))."',
high='".add_slashes(strip_out($_POST['high']))."',
features='".$features_total."',
comments='".add_slashes($_POST['comments'])."',
mk_comment='".add_slashes($_POST['mk_comment'])."',
title_page='".add_slashes($_POST['title_page'])."',
certified='".add_slashes($_POST['certified'])."',
sold='".add_slashes($_POST['sold'])."',
sold_txt='".add_slashes($_POST['sold_txt'])."',
se_index='".add_slashes($_POST['se_index'])."',
one_owner='".add_slashes($_POST['one_owner'])."',
special= '".$special."'
WHERE id=".$_GET["id"];
if(@mysql_query($sql)) die(header("Location: index.php?status=update"));
else
$error_msg = "Record was not updated because of invalid data posted.";
}
我刚刚得到: “由于发布的数据无效,记录未更新。”
它没有显示任何其他错误。我刚刚读到这个post,它说从 MySQL 5.0 开始,您应该在表名之前包含数据库名称 $sql = "INSERT INTO database.table (columnOne, columnTwo)。 .. 但不确定。
如果您知道为什么此 UPDATE 不再起作用,我将非常感谢任何帮助。
编辑:摘自 OP 的评论:(对于那些想知道 add_slashes() 函数的用法的人)。
add_slashes 是从本地函数文件中插入的。
function add_slashes($string) {
if (!get_magic_quotes_gpc())
return addslashes($string);
else
return $string;
}
编辑:我尝试添加 mysql_error() 并得到:
您的 SQL 语法有错误;查看与您的 MySQL 服务器版本相对应的手册,在第 12 行的 'condition='good', millage='7087', vin='2BFKOPP25B5YR501', price' 附近使用正确的语法
【问题讨论】:
-
一方面,看起来函数名实际上是
add_slashes。 php.net/manual/en/function.addslashes.php -
我在升级时遇到了 DATE、DATETIME 和 TIMESTAMP 列的一些问题,不确定您的列是否属于这些类型(看起来
stored是 DATE 类型)。我通过删除列并重新添加它来修复它。这是一个包含更多信息的链接dev.mysql.com/doc/refman/5.5/en/… -
condition是保留字dev.mysql.com/doc/refman/5.5/en/reserved-words.html,这很可能是@JohnA10 的原因 -
@Fred-ii- BINGO!尊重!非常感谢大师!我只是避开了
condition='".add_slashes($_POST['condition'])."',,它现在可以工作了。看来我有很多工作要更改数据库中此变量的名称以及使用它的任何地方,哎哟! -
不客气。很高兴我能帮助你。 @JohnA10 我刚才发布了一个答案,如果你想关闭它,它就不会一直无人回答。干杯 - 有一个反引号的例子。