Php 消息:从Codeigniter2x版本到Codeigniter 3x版本的非法字符串偏移量升级
我最近将我的项目包从Codeigniter 2X版本切换到Codeigniter 3X版本 以前我所有的代码都工作得很好,但现在有了新的包,它显示了一些微小的错误,我无法运行我的代码 错误如下: 消息:非法字符串偏移量: 我的控制器:Php 消息:从Codeigniter2x版本到Codeigniter 3x版本的非法字符串偏移量升级,php,codeigniter,wampserver,Php,Codeigniter,Wampserver,我最近将我的项目包从Codeigniter 2X版本切换到Codeigniter 3X版本 以前我所有的代码都工作得很好,但现在有了新的包,它显示了一些微小的错误,我无法运行我的代码 错误如下: 消息:非法字符串偏移量: 我的控制器: public function proflist(){ $data = ""; $this->load->model('feedbackmodel'); $data['teachers'] =
public function proflist(){
$data = "";
$this->load->model('feedbackmodel');
$data['teachers'] = $this->feedbackmodel->getFaculty();
$this->load->view('feedback/proflist',$data);
}
我的模型:
public function getFaculty(){
$query = $this->db->query('SELECT * FROM teacher');
return $query->result_array();
}
我的看法是:
<?php
if(!empty($teachers)) {
foreach($teachers as $y){
?>
<tr>
<td><?php echo $y->fid; ?></td>
<td><?php echo $y->fname." ". $y->lname; ?></td>
<td><?php echo $y->email; ?> </td>
<td>
...
...
有什么错误吗?我该怎么换呢。请让我知道:)谢谢。原因很可能是您正在使用的PHP版本。在PHP7.1之前,它只是因为使用非法偏移量而引发的通知。7.1+现在将抛出警告。您可以通过在控制器中围绕有问题的数组包装一个“(如果不是,则为isset”)来避免它。一定要同时施放阵列
为了确定正在运行的PHP版本,可以使用
phpinfo()代码>您需要更加了解变量类型
在控制器中
public function proflist(){
$data = "";
$this->load->model('feedbackmodel');
$data['teachers'] = $this->feedbackmodel->getFaculty();
$this->load->view('feedback/proflist',$data);
}
您通过$data=“”)将$data声明为字符串代码>,
然后你决定它将是一个数组
$data['teachers'] = $this->feedbackmodel->getFaculty();
要正确,$数据应声明为空数组,而不是emtpy字符串
public function proflist(){
$data = array(); // Using the older style of declaring an array.
$this->load->model('feedbackmodel');
$data['teachers'] = $this->feedbackmodel->getFaculty();
$this->load->view('feedback/proflist',$data);
}
现在,在您的模型中,返回的数据是通过
return $query->result_array();
如果您查阅codeigniter文档,它会告诉您结果数据是一个关联数组,即$data['teachers']的形式
$data['teachers']['fid']
等
视图要求它是一个对象。
所以你可以改变你的观点,要求$teachers是一个对象,从
<?php
// $teachers should be returned from result() which is an object.
if(!empty($teachers)) {
foreach($teachers as $y){
?>
<tr>
<td><?php echo $y->fid; ?></td>
<td><?php echo $y->fname." ". $y->lname; ?></td>
<td><?php echo $y->email; ?> </td>
<td>
...
到
因此,简短的版本是:
检查返回的数组结构。您应该为此使用var_dump()
更改您的代码以适应
将模型的返回值从result_array()更改为result(),或者
将视图从寻址对象更改为关联阵列
在这一阶段,我迫切需要更多的时间来讨论细节,但这应该可以帮助您了解正在发生的事情。您使用的是PHP7.1吗?
<?php
// $teachers should be returned from result() which is an object.
if(!empty($teachers)) {
foreach($teachers as $y){
?>
<tr>
<td><?php echo $y->fid; ?></td>
<td><?php echo $y->fname." ". $y->lname; ?></td>
<td><?php echo $y->email; ?> </td>
<td>
...
<?php
// $teachers is returned from result_array() which is an associative array.
if(!empty($teachers)) {
foreach($teachers as $y){
?>
<tr>
<td><?php echo $y['fid']; ?></td>
<td><?php echo $y['fname']." ". $y['name']; ?></td>
<td><?php echo $y['email']; ?> </td>
<td>
...
public function getFaculty(){
$query = $this->db->query('SELECT * FROM teacher');
return $query->result_array(); // Return an associative array
}
public function getFaculty(){
$query = $this->db->query('SELECT * FROM teacher');
return $query->result; // Return an object
}