3

私はこのエラーについてかなり徹底的な検索を行いました。「配列またはSQLクエリを渡していることを確認する」に関する一般的な回答はたくさんありますが、CodeIgniterライブラリごとにさらに具体的なヘルプが必要になる可能性があります。

クエリ(または配列)を作成してテーブルを生成するだけのビューがあります。

(最終的に、クエリはモデルから発生し、テーブル生成はコントローラーの関数になるため、他のビューで再利用できますが、最初は基本的なエコーから画面へのエコーから始めます)

ビューは次のように設定されます。

<div class="span4 well well-small">
            <h4>Requests:</h4>
            <?php
                $this->table->set_heading('ID', 'Request', 'User', 'Date');

                $query = array('id'=>'123', 'request'=>'FARTS', 'user'=>'Steve', 'date'=>'Today'); //$this->db->select('user_id', 'password', 'user_name', 'company_id')->from('users');
                echo $this->table->generate($query);
            ?>
            <h4>In this div:</h4>
            <p>we will display some information about recent requests. It will show a small table with Request ID, Request Name, and Date Requested headers.</p>
</div>

これにより、次のような4つのPHPエラーボックスを含むボックスが出力されます。

PHPエラーが発生しました

重大度:警告

メッセージ:foreach()に無効な引数が指定されました

ファイル名:libraries / Table.php

行番号:198

Table.phpライブラリの行198を確認すると、配列(連想的かどうか)、またはDBからのクエリが必要です。非連想配列、連想配列、およびデータベースクエリを渡そうとしましたが、これらはすべて同じエラーを生成します。

そして、CIをリーフする必要がないので、エラーをスローする関数は次のとおりです。

function _prep_args($args)
{
    // If there is no $args[0], skip this and treat as an associative array
    // This can happen if there is only a single key, for example this is passed to table->generate
    // array(array('foo'=>'bar'))
    if (isset($args[0]) AND (count($args) == 1 && is_array($args[0])))
    {
        // args sent as indexed array
        if ( ! isset($args[0]['data']))
        {
            foreach ($args[0] as $key => $val)
            {
                if (is_array($val) && isset($val['data']))
                {
                    $args[$key] = $val;
                }
                else
                {
                    $args[$key] = array('data' => $val);
                }
            }
        }
    }
    else
    {
        foreach ($args as $key => $val)
        {
            if ( ! is_array($val))
            {
                $args[$key] = array('data' => $val);
            }
        }
    }

    return $args;
}
4

1 に答える 1

4

$query 変数を次のように変更します。

$query = array(array('id'=>'123', 'request'=>'FARTS', 'user'=>'Steve', 'date'=>'Today'));

そのメソッドは、特定のキー=>値のペアがなくても、配列の配列を期待しています。

$query = array(array('123','FARTS','Steve', 'Today'));

本質的に、これは CI のデータベース ライブラリを使用するときにデータベース クエリが返すべきものでもあります。

個人的には、db クエリから直接データを使用する場合を除き、次を使用します。

$this->table->add_row('123','FARTS','Steve', 'Today');
-OR-
$this->table->add_row(array('ID'=>'hello','class'=>'Today','data'=>'Displayed Text'));

データベースクエリで同じエラーが発生する限り、そのクエリから実際に受け取っている出力の種類を3回確認します。

お役に立てれば

于 2013-01-09T17:28:50.777 に答える