我是一个MySQL菜鸟,基本上是在修改插入查询以成为更新查询。所以我确信语法很简单。但是这有什么问题?
// Save data
$mySQLQuery = 'update `'. $fl['mysql_table']. '` SET '. $fl['mysql_query']. "' WHERE speres = '" . mysql_real_escape_string($_POST['speres']);
$rs = @mysql_query($mySQLQuery);
原始的INSERT查询(工作)是
// Save data
$mySQLQuery = 'INSERT INTO `'. $fl['mysql_table']. '` SET '. $fl['mysql_query'];
$rs = @mysql_query($mySQLQuery);
此处生成数据:
$fl['mysql_query'] = "menrecin = '" . mysql_real_escape_string(YDFLValue($_SESSION['form']['item_17'])) . "', menrecvej = '" . mysql_real_escape_string(YDFLValue($_SESSION['form']['item_18'])) . "', menrecser = '" . mysql_real_escape_string(YDFLValue($_SESSION['form']['item_19'])) . "', menrecud = '" . mysql_real_escape_string(YDFLValue($_SESSION['form']['item_20'])) . "', menresmor = '" . mysql_real_escape_string(YDFLValue($_SESSION['form']['item_22'])) . "', menresfro = '" . mysql_real_escape_string(YDFLValue($_SESSION['form']['item_23'])) . "', menresmid = '" . mysql_real_escape_string(YDFLValue($_SESSION['form']['item_24'])) . "', menresres = '" . mysql_real_escape_string(YDFLValue($_SESSION['form']['item_25'])) . "', menrumind = '" . mysql_real_escape_string(YDFLValue($_SESSION['form']['item_28'])) . "', menrumren = '" . mysql_real_escape_string(YDFLValue($_SESSION['form']['item_29'])) . "', menrumved = '" . mysql_real_escape_string(YDFLValue($_SESSION['form']['item_30'])) . "', tekip = '" . $_SERVER['REMOTE_ADDR'] . "', tekbro = '" . $_SERVER['HTTP_USER_AGENT'] . "', tektid = NOW()";
我在数据库中有一个speres = 100525的条目,所以请尝试:
答案 0 :(得分:3)
对动态SQL进行故障排除的良好做法:
查看SQL,而不是构建SQL的代码。换句话说,回显$mySQLQuery
以查看最终的SQL,大多数情况下您可以立即看到错误。
不要压制错误。 Error-checking在任何代码中都是有用且必要的。
在我看来,您的查询最终会成为:
update `tablename` SET ..., tektid = NOW()' WHERE speres = '...;
所以你在NOW()
之后有一个虚假的引用,最后是一个缺失的引用。
如果你检查过错误,你会得到这样的结果:
ERROR 1064 (42000): 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 '' WHERE speres = '...' at line 1
答案 1 :(得分:2)
围绕WHERE子句开头的引用看起来很奇怪:
UPDATE `...some table...` SET ...some query... 'WHERE speres = ' ... some criterion ...
请注意单引号展示位置。也许你想从双引号中删除单引号?
答案 2 :(得分:0)
您的查询应该看起来像
$mySQLQuery = 'update'. $fl['mysql_table'].'SET'. $fl['mysql_query'].'= <some value>' ' WHERE speres = '.mysql_real_escape_string($_POST['speres']);
$rs = @mysql_query($mySQLQuery);