Php 动态更新数据

Php 动态更新数据,php,Php,出错 public function update($id, $table, $data, $exclude = array()){ $query = "UPDATE $table SET"; $fields = $values = array(); if( !is_array($exclude) ) $exclude = array($exclude); foreach( array_keys($data) as $key ) { i

出错

  public function update($id, $table, $data, $exclude = array()){

    $query = "UPDATE $table SET";

    $fields = $values = array();

    if( !is_array($exclude) ) $exclude = array($exclude);
    foreach( array_keys($data) as $key ) {

        if( !in_array($key, $exclude) ) {
            $fields[] = "`$key`";
            $values[] = "'" . $this->db->real_escape_string($data[$key]) . "'";
        }

        $fields = implode(" ", $fields);
        $values = implode(" ", $values);

        $query .= $fields . "=" . $values . ",";

    }

    $query = $query . "WHERE id = '".$id."' ";


      if(!$this->db->query($query)){
        echo "Something wrong with query ";

      }
      else{
        echo "successfully updated";
      }

  }
调整了add函数中的代码。希望在不使用变量的情况下动态更新字段和值,即$\u POST['address']

Fatal error: [] operator not supported for strings
似乎不起作用。不确定导致错误的原因:致命错误:[]字符串不支持运算符。如何在sql查询中插入field=value?

像这样使用

 $query .= $fields . "=" . $values . ", ";

看看foreach循环

  if( !is_array($exclude) ) $exclude = array($exclude);
    foreach( array_keys($data) as $key ) {
        if( !in_array($key, $exclude) ) {
            $query .= $key . "='" . $data[$key] . "' ,";
        }
    }
    $query = substr($query,0,strlen($query)-1);

    $query = $query . " WHERE id = '".$id."' ";
更改这两行和循环外的下一行的名称。也许这能解决你的问题

foreach( array_keys($data) as $key ) {

    if( !in_array($key, $exclude) ) {
        $fields[] = "`$key`";
        $values[] = "'" . $this->db->real_escape_string($data[$key]) . "'";
    }

    $fields = implode(" ", $fields); // Mistake done here
    $values = implode(" ", $values); // Mistake done here

    $query .= $fields . "=" . $values . ","; 

}

遵循我的代码。其中不需要实现
内爆()
函数。我已经更改了你的功能代码。试试看

foreach( array_keys($data) as $key ) {
    if( !in_array($key, $exclude) ) {
        $fields[] = "`$key`";
        $values[] = "'" . $this->db->real_escape_string($data[$key]) . "'";
    }       
}
$fields = implode(" ", $fields);
$values = implode(" ", $values);
$query .= $fields . "=" . $values . ","; 

将foreach内的数组内爆,并在同一变量中更新,使其变为字符串<代码>$fields=内爆(“,$fields”),在foreach外部执行,或初始化
$fields=$values=array()在foreach的开头。如果你不接受建议,为什么人们会帮助你?是的,在你发布之前我已经这么做了。但它不起作用。什么;问题出在哪里?只有该查询失败。问题可能出在这里
$query=$query。“其中id=””$id.“”
,尝试在其中
$query=$query之前添加一个空格。“其中id=””$id.“”名称
地址
国家
”附近使用的正确语法。谢谢,但遗憾的是,除了运行查询失败之外,它没有显示任何内容。谢谢。我复制了你的substr行。非常感谢,谢谢。现在sql错误消息:准备失败:(1064)您的sql语法有错误;检查与MySQL服务器版本对应的手册,以了解在第1行“WHERE id='1''附近使用的正确语法,但我不使用prepare。哈哈。好像是queryOh中的语法问题我看到逗号卡在WHERE的末尾。那么,当字段是最后一个字段时,如何删除逗号呢?
public function update($id, $table, $data, $exclude = array()){

    $query = "UPDATE $table SET";

    $fields = $values = array();

    if( !is_array($exclude) ) $exclude = array($exclude);
    foreach( array_keys($data) as $key ) {

        if( !in_array($key, $exclude) ) {
            $queryArr[] = $key . "='" . $this->db->real_escape_string($data[$key]);                
        }
    }  
    $query = implode(" ,", $queryArr);

    $query = $query . "WHERE id = '".$id."' ";    

      if(!$this->db->query($query)){
        echo "Something wrong with query ";

      }
      else{
        echo "successfully updated";
      }

  }