2012-03-20 14 views
0

シリアル化された配列で行を更新しようとしていますが、以下のSQL文を実行すると行が更新されません。シリアル化された配列でMYSQL行が更新されない

しかし、代わりにTESTのような単語を使用すると更新されます。

これを解決するための助けがあれば幸いです。

戻り値影響を受けた0行:

UPDATE lists SET col1 = 'a:9:{i:0;s:7:"English";i:1;s:7:"Spanish";i:2;s:6:"Korean";i:3;s:4:"Thai";i:4;s:0:"";i:5;s:0:"";i:6;s:0:"";i:7;s:0:"";i:8;s:0:"";}' WHERE list_id = '6' 

更新行正しく:

以下
UPDATE lists SET col1 = 'TEST' WHERE list_id = '6' 

はCodeIgniterのPHP関数です:

public function update_field($table, $field, $value, $whereField = FALSE, $whereValue = FALSE) 
{ 

$user_id = $this->session->userdata('user_id'); 
if ($whereField === FALSE) { 
$sql = "UPDATE $table SET $field = '$value'"; 
$query = $this->db->query($sql); 
} else { 

    $data = array(
     $field => $value 
    ); 

    $this->db->where($whereField, $whereValue); 
    $this->db->update($table, $data); 

} 

if ($this->db->_error_message()) { 

    echo 'Error Num: ' . $this->db->_error_number(); //returns 0 if query successful/no error 
    echo '<br />Message: ' . $this->db->_error_message(); 
} 

} 
+1

エスケープdoubleqoutesを返し、試してみて、何デシベルすなわちVARのcharなどのcol1のフィールドのですか? –

+0

Thx。テキストに設定されています – jsuissa

+0

col1はどのように定義されていますか?それはCHARですか?もしそうなら、あなたの値がその列の最大長を超えていないことを確かめてください。 –

答えて

0

ラインで結構です。

フィールドを現在の値に更新しようとすると(つまり、実際の変更を行わない場合)、更新された行が0になります。例えば

私は従業員テーブルを持っている場合は、:

employees 
id name  city 
1  John  London 

UPDATE `employees` SET `city` = "London" WHERE `id` = 1 

// 0 rows affected 

あなたが実際の変更を加えていない場合には0

+0

問題はラインではありません。Codeigniterに問題があり、シリアル化された配列を渡すように見えます。 – jsuissa

+0

$ this-> db-> set( 'col'、serialize(array( 'a' => 'b'))); – galchen

+0

私の場合は、モデルに渡す前に配列をシリアライズしたときに失敗しましたが、モデルで配列をシリアライズしたときにcodeigntierでアクティブなレコードを使用していました。非常に奇妙な。 CIフォーラムでフォローアップを投稿しました。 – jsuissa

関連する問題