尝试执行条件更新时,MySQL或PHP语法疏忽

rob*_*ber 2 php mysql

我认为这是一个逃避问题或其他问题.当我执行查询并填充所有变量时,一切都很好,所有行都在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";
Run Code Online (Sandbox Code Playgroud)

当我打破查询以插入"IF"时,我不断得到以下内容:错误:您的SQL语法中有错误; 检查与MySQL服务器版本对应的手册,以便在第1行的''附近使用正确的语法

我回答了查询,并且由于一些奇怪的原因它不能完成,变量在查询开始之前就像是这样

fname ='Rob',lname ='Smith',location ='Jersey City,NJ',url =' http://somesite.com',UPDATE用户SET 错误:您的SQL语法中有错误; 检查与MySQL服务器版本对应的手册,以便在第1行的''附近使用正确的语法

对不起,如果我不清楚.我会在需要的地方澄清.我是新生的.谢谢!

Fra*_*mer 6

在您设置的最后一件事之后,不允许使用逗号.

一个简单的解决方案是:

$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";
}
Run Code Online (Sandbox Code Playgroud)

哦,并确保你在查询中推断的变量是SQL安全的; 否则你有一个SQL注入问题.