Php I';我试着不让foreach犯同样的错误,但现实不会让我犯同样的错误(拉霍伊风格)

Php I';我试着不让foreach犯同样的错误,但现实不会让我犯同样的错误(拉霍伊风格),php,mysql,Php,Mysql,我在这一页上了解到,foreach是快速的,而对数据库的查询则不是。因此,我尝试执行单个更新查询,但它不起作用: $array = ''; foreach ($myar as $key => $value) { $array .= " (name='$value' WHERE lid='$key'), "; } $link1 = $db->prepare("UPDATE leyes SET $array"); $link1->execute(); 我收到一个错误:致

我在这一页上了解到,foreach是快速的,而对数据库的查询则不是。因此,我尝试执行单个更新查询,但它不起作用:

$array = '';
foreach ($myar as $key => $value) {
  $array .= " (name='$value' WHERE lid='$key'), ";
}

$link1 = $db->prepare("UPDATE leyes SET $array");
$link1->execute();  
我收到一个错误:致命错误:未捕获异常“PDOException”,消息为“SQLSTATE[42000]:语法错误或访问冲突:1064您的SQL语法有错误

一种解决方案:

  $array = '';

  foreach ($myarr as $key => $value) {
      $array .= " WHEN '$key' THEN '$value' ";
  }
  $array .= " ELSE name
  END";

  $link1 = $db->prepare("UPDATE table SET name = CASE id $array");
  $link1->execute();  
试着

$array = '';
$i = 1;
foreach ($myar as $key => $value) {
    $array .= " name='$value' WHERE lid='$key'";
    if(count($myar) != $i++)
       $srray .= ',';
}
$link1 = $db->prepare("UPDATE leyes SET $array");
$link1->execute();  
我想您在最后一个Where语句中遇到了额外的“,”的问题,请只添加这一行

$array = '';
foreach ($myar as $key => $value) {
  $array .= " (name='$value' WHERE lid='$key'), ";
}

//Add this
$array = substr($array, 0, -2);

$link1 = $db->prepare("UPDATE leyes SET $array");
$link1->execute();

我以前从未见过
更新
的这种语法,我不得不证实我的怀疑,它不会那样工作。据我所知,在更新中不能使用多个WHERE子句。你不能在一份声明中完成你想要的

也就是说,您可以使用一些优化策略。从这里开始:

它不起作用对问题的描述不是很有帮助……如果您使用预处理语句,请实际使用预处理语句,而不是构建SQL语句。这似乎不是正确的语法。UPDATE语句中只能有一个WHERE子句:此行将删除最后一个逗号和空格,而无需在每次迭代中检查条件。它不起作用,相同的错误:致命错误:未捕获异常“PDOException”,消息为“SQLSTATE[42000]:语法错误或访问冲突:1064您的SQL语法中有错误谢谢!我在一个web搜索解决方案中看到了这种语法:S