首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当尝试执行条件更新时,MySQL或PHP语法监督

当尝试执行条件更新时,MySQL或PHP语法监督
EN

Stack Overflow用户
提问于 2009-11-10 01:23:35
回答 6查看 263关注 0票数 2

我觉得这是个逃避的问题。当我执行查询并填充所有变量时,所有内容都是peachy的,所有行都在DB中正确更新。

我查看了StackOverflow,让我在动态/动态构建的查询中滚动,我已经到了极限。

我的东西看起来像这样:

代码语言:javascript
复制
$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行上使用的正确语法

抱歉,如果我不清楚。我会在需要的地方澄清。这一切我都是新手。谢谢!

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2009-11-10 01:30:18

在你最后一次设置之后,你不允许有逗号。

一个简单的解决办法是:

代码语言:javascript
复制
$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注入问题。

票数 6
EN

Stack Overflow用户

发布于 2009-11-10 01:30:59

记住,在这些编程语言中,每个语句(以a;结尾的文本)很像一个完整的句子。你需要一个主宾动词才能使它有意义。我不能就这么说

代码语言:javascript
复制
 doggy;

我不得不说

代码语言:javascript
复制
 feed the doggy;

同样,我不能说

代码语言:javascript
复制
 "fname = '$fname', "

当我的意思是“将此字符串附加到前面启动的查询”时。我必须明确:

代码语言:javascript
复制
 $sql .= "fname = '$fname', ";

我的意思是“把这段文字附加到$sql”。一句完整的话。

票数 1
EN

Stack Overflow用户

发布于 2009-11-10 01:31:49

最好将所有集合放入一个数组中,并将它们内爆到一个字符串中。这样你就可以确定没有悬空的逗号了。类似于:

代码语言:javascript
复制
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.
} 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1705097

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档