0

正確にaffected_rowsが何を返すかを確認しました。何かが削除された場合は>0を返し、何も削除されなかった場合は0を返すはずです。

しかし、商品を削除すると、商品IDを介して存在するため、削除されます。しかし、私のモデルでこれを実行しようとして、問題の製品が削除されたかどうかをテストしたい場合は、次のようにします。

function delete_product($id)
{
    $tables = array('products', 'attributes');
    $this->db->where('p_id', $id);
    $this->db->delete($tables);


    if ($this->db->affected_rows() > 0)
    {
        return TRUE;
    }
    else
    {
        return FALSE;
    }
}

そして、そのように私のコントローラーに値を返します:

public function delete()
{
    $id = $this->uri->segment(3);

    $this->a_model->delete_product($id);

    if($res == FALSE)
    {
        $this->session->set_flashdata('success_delete', 'Product deleted successfully.');
        redirect('admin/index');
    }
    else
    {
        $this->session->set_flashdata('error_delete', 'Product not deleted. We gots an issue.');
        redirect('admin/index');
    }
}

戻り値は常にfalse、つまり0です。しかし、データベースをチェックして製品が削除されたかどうかを確認すると、製品は削除されます。誰かが私が間違っていることを指摘できますか?

4

6 に答える 6

2

related_rows() は「書き込み」クエリにのみ適用されます。

「書き込み」タイプのクエリ (挿入、更新など) を実行するときに、影響を受ける行の数を表示します。

注: MySQL では、"DELETE FROM TABLE" は影響を受ける 0 行を返します。データベース クラスには、影響を受ける行の正しい数を返すことを可能にする小さなハックがあります。デフォルトでは、このハックは有効になっていますが、データベース ドライバ ファイルで無効にすることができます。

ハックが有効になっていることを確認することをお勧めします。 http://ellislab.com/codeigniter/user-guide/database/helpers.html

于 2013-03-11T19:16:50.193 に答える
1
$this->a_model->delete_product($id);

if($res == FALSE)

する必要があります:

$res = $this->a_model->delete_product($id);

if ($res === FALSE)

に値を割り当てておらず$res、の値に変数を割り当てていません$this->a_model->delete_product($id)===また、ベストプラクティスとして安全を期すために、ブール値を処理するときに厳密な比較を行うために使用することもできます。

あなたはいつでもこれを行うことができます:

if (!$this->a_model->delete_product($id))
于 2013-03-11T20:16:28.403 に答える
1

これを試して:

 if($this->db->delete($tableName))
    return true;
     else
        return false;
于 2013-03-12T05:53:51.203 に答える
-1

いくつかの間違いがあります

あなたが書いている:if ($this->db->affected_rows() > 0)

しかし、それはあるべきです:if ($this->db->affected_rows > 0)

() を selected_rows() から削除し、affected_rows のみを書き込む必要があります...

于 2014-08-26T07:40:15.630 に答える