动态更新数据

时间:2016-06-14 06:35:50

标签: 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 ) {

        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";
      }

  }

收到错误

Fatal error: [] operator not supported for strings

来自添加功能的调整代码。希望动态更新字段和值而不使用变量,即$ _POST ['地址']。

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

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

3 个答案:

答案 0 :(得分:1)

像这样使用

  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."' ";

答案 1 :(得分:1)

看看foreach循环!!!

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 . ","; 

答案 2 :(得分:1)

关注我的代码。不需要实现implode()功能的地方。我已经改变了你的功能代码。试试吧。

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";
      }

  }
相关问题