我已经对这个错误进行了彻底的搜索,虽然我找到了很多关于“确保你传递数组或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;
}
答案 0 :(得分:4)
将$ query变量更改为:
$query = array(array('id'=>'123', 'request'=>'FARTS', 'user'=>'Steve', 'date'=>'Today'));
该方法期待一个数组数组,即使没有特定的key =&gt;值对。
$query = array(array('123','FARTS','Steve', 'Today'));
从本质上讲,这也是使用CI的数据库库时应该返回的数据库查询。
就个人而言,除非您要直接使用数据库查询中的数据,否则我会使用:
$this->table->add_row('123','FARTS','Steve', 'Today');
-OR-
$this->table->add_row(array('ID'=>'hello','class'=>'Today','data'=>'Displayed Text'));
就数据库查询获得相同错误而言,我会三重检查您实际从查询中获得的输出类型。
希望这有帮助