我觉得这是个逃避的问题。当我执行查询并填充所有变量时,所有内容都是peachy的,所有行都在DB中正确更新。
我查看了StackOverflow,让我在动态/动态构建的查询中滚动,我已经到了极限。
我的东西看起来像这样:
$sql="UPDATE users SET ";
if (!empty($fname)) { "fname = '$fname', ";}
if (!empty($lname)) { "lname = '$lname', ";}
if (!empty($location)) { "location = '$location', ";}
if (!empty($url)) { "url = '$url', ";}
"WHERE id = '$id' LIMIT 1";当我中断查询以插入"IFs“时,我一直得到以下内容:错误:您的MySQL语法有一个错误;检查与您的MySQL服务器版本对应的手册,以获得在第1行上使用的正确语法
我响应了这个查询,出于一些奇怪的原因,它不是要完成的,而变量在查询开始之前就会出现,如下所示
fname = 'Rob',lname = 'Smith',location = 'Jersey,NJ',url = 'http://somesite.com/',UPDATE use error :您在SQL语法中有一个错误;检查与MySQL服务器版本对应的手册,以获得在第1行上使用的正确语法
抱歉,如果我不清楚。我会在需要的地方澄清。这一切我都是新手。谢谢!
发布于 2009-11-10 01:30:18
在你最后一次设置之后,你不允许有逗号。
一个简单的解决办法是:
$set = array();
if (!empty($fname)) { $set[] = "fname = '$fname'";}
if (!empty($lname)) { $set[] = "lname = '$lname'";}
if (!empty($location)) { $set[] = "location = '$location'";}
if (!empty($url)) { $set[] = "url = '$url'";}
if(!empty($set)) {
$sql = "UPDATE users SET ";
$sql .= implode(', ', $set)
$sql .= " WHERE id = '$id' LIMIT 1";
}哦,确保在查询中插入的变量是SQL安全的,否则就会出现SQL注入问题。
发布于 2009-11-10 01:30:59
记住,在这些编程语言中,每个语句(以a;结尾的文本)很像一个完整的句子。你需要一个主宾动词才能使它有意义。我不能就这么说
doggy;我不得不说
feed the doggy;同样,我不能说
"fname = '$fname', "当我的意思是“将此字符串附加到前面启动的查询”时。我必须明确:
$sql .= "fname = '$fname', ";我的意思是“把这段文字附加到$sql”。一句完整的话。
发布于 2009-11-10 01:31:49
最好将所有集合放入一个数组中,并将它们内爆到一个字符串中。这样你就可以确定没有悬空的逗号了。类似于:
if (!empty($fname)) $sets[]="fname = '$fname' ";
if (!empty($lname)) sets[]= "lname = '$lname' ";
if (!empty($location)) sets[]= "location = '$location' ";
if (!empty($url)) sets[]= "url = '$url' ";
$setstring= implode(',',$sets);
if($setstring) {
$query="UPDATE users SET $sets WHERE id = '$id' LIMIT 1";
//run query, etc.
} https://stackoverflow.com/questions/1705097
复制相似问题