0

CI アプリに次のコードがあります。

$query = "INSERT INTO user(user_name,user_email) VALUES(?,?)";
        $result = $this->db->query($query,array($userName,$email));
        if ($result->num_rows()>0)
            return $this->db->insert_id();
        else
            return null;

これによりエラーが発生します。致命的なエラー: 38 行目の C:\xampp\htdocs\cmdline\application\models\mlogin.php の非オブジェクトに対するメンバー関数 num_rows() の呼び出し

行 38 は、行数が 0 より大きいという条件です。何が起こっているのかわかりません - CI のドキュメントを使用して行数が 0 より大きいかどうかを確認していますが、なぜこれが失敗するのですか?

4

2 に答える 2

0

INSERTクエリを実行しているからです。データを変更するクエリTRUEはすべての場合に返されるため、実際に試みているのはTRUE->num_rows()であり、意味がなく、エラーが発生します。

実際に確認したいのは$this->db->affected_rows()、データベースに挿入された行数を示す です。

この場合は行っていませんがaffected_rows()、クエリ中に実際に変更された行の数のみを返すことに注意してください。したがって、UPDATE実際にはデータを変更しないクエリ (つまり、フィールドに既にクエリの値がある場合)に設定しようとしている場合)、その行はaffected_rows()値に反映されません。

于 2013-01-26T12:07:27.637 に答える
0

CodeIgniter のドキュメントから。

query() 関数は、「読み取り」タイプのクエリが実行されたときにデータベース結果オブジェクトを返します。これを使用して結果を表示できます。「書き込み」タイプのクエリが実行されると、成功または失敗に応じて TRUE または FALSE が返されます。データを取得するときは、通常、次のようにクエリを独自の変数に割り当てます。

INSERT であるため、クエリは単純に TRUE または FALSE を返します。

于 2013-01-26T12:09:38.657 に答える