2016-06-14 4 views
-1
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 ['address']。

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

は動作していないようです。エラーの原因は不明:致命的なエラー:[]演算子は文字列でサポートされていません。フィールド=値をSQLクエリに挿入するには? 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."' "; 
+1

あなたはforeach内で配列を内包し、同じ変数で更新してstringに変更します。 '$ fields = implode(" "、$ fields);'、foreachの外で行うか、foreachの始めに '$ fields = $ values = array();'を初期化します。 –

+0

あなたが提案をしなければ人々はなぜあなたを助けますか? –

答えて

1

使用!

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

} 

これら2行とループ外の次の行を変更します。あなたの問題を解決するかもしれません。

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

残念ながら、実行クエリが失敗したこと以外は何も表示されません。 – joe

+0

私はコードを更新しました。それを試して、一度 – Mani

+0

よろしくお願いします。 substr行をコピーしました。どうもありがとうございました。 – joe

1

ルックのような

+0

私はすでに投稿したことがあります。しかしそれはうまくいかなかった。 – joe

+0

問題は何ですか? –

+0

そのクエリのみが失敗しました。 – joe

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

    } 
+0

SQLエラーメッセージ:Prepare failed:(1064)SQL構文にエラーがあります。あなたのMySQLサーバのバージョンに対応するマニュアルをチェックし、正しい構文が1行目の 'WHERE id =' 1 ''の近くで使用するようにしてください。 – joe

+0

http://stackoverflow.com/questions/17713278/attempting-to-learn-mysqli-prepared -statements-what-am-i-doing-wrong –

+0

http://www.inmotionhosting.com/support/website/database-troubleshooting/error-1064 –

関連する問題