1

CodeIgniterUPDATEクエリに問題があります。

私のモデル:

function update_order($id,$old_order){

    //Update The order
    $query = $this->db->query("SELECT * FROM cat WHERE `cat_order`='$old_order' ");
    $row =  $query->row();

    $this->db->query("UPDATE cat SET cat_order='".$row->cat_order."' WHERE id='".$id."' ");
    $this->db->query("UPDATE cat SET cat_order='$old_order' WHERE id ='".$row->id."' ");

}  

SELECTクエリは 100% 機能していますが、2 つのUPDATEクエリは機能していません。

4

4 に答える 4

3

さて、何が起こっているのか見てみましょう (少なくとも、私が理解できること)。

  1. たとえば、2 ( )catに等しいテーブルからすべてを選択します。cat_order$old_older
  2. 返されたすべてのレコードのうち、1 行だけを取得します ( $row = $query->row())。
  3. 返された唯一の行、つまりレコードセットの最初の行を更新し、その新しい値を前の選択によって抽出された同じ値に設定します ( $row->cat_order)、ID を使用して、それがどこから来て、どの行を参照しているのかわかりません。
  4. ID ( )で識別される最初の selectによって返された唯一の行を更新し、その値 ( ) を指定します (この場合は 2)。$row->id$old_olderSET cat_order='$old_order'

つまり、クエリは問題ありませんが、同じ値で更新しているため、変更が表示されません。それとも、明らかな何かを見落としていますか?

ところで、噴射孔があります。Active Record を使用するか、プレースホルダー付きのクエリ バインディングを使用します。

$sql = "UPDATE table SET column = ? WHERE id = ?";
$this->db->query($sql, array($value, $id));
于 2012-09-28T18:45:54.143 に答える
1

Active Recordで更新するだけです。データをサニタイズします。SQL インジェクションの心配はありません。

$this->db->where('id',$id); 
$this->db->set('cat_order',$row->cat_order);
$this->db->update('cat');

2 番目の更新クエリについても同じことを行います。

于 2012-09-28T18:07:00.403 に答える
0

ほとんどの場合、ID は主キーであり、引用符を付けてはなりません。

$this->db->query(
  "UPDATE cat SET cat_order='".$row->cat_order."' WHERE id = " .$id );

$this->db->query(
  "UPDATE cat SET cat_order='$old_order' WHERE id = " . $row->id );
于 2012-09-28T17:54:09.857 に答える