codeigniter 在使用sqlsrv_query外部数据库的CodIgniter上使用Foreach时字符串偏移量非法

hc2pp10m  于 2022-12-07  发布在  其他
关注(0)|答案(2)|浏览(111)

我试图从一个外部的sql数据库,我已经知道热得到这个使用常规的php页面,但我是新的codeigniter,我想试试,如果这可以工作的雇员名单。
所以我的controller.php看起来像这样。

class Patients extends CI_Controller {

        function index() {

            $data['title'] = 'Patients';

            $data['patients'] = $this->Patients_model->get_patients();

            $this->load->view('templates/header');
            $this->load->view('patients/index', $data);
            $this->load->view('templates/footer');                  

            print_r($data);     

        }

我把print_r($data),看看它是否输出正确,我确实得到了下面的数组数据,但它的奇怪,因为它只返回一个单一的数据,因为我的sqlsrv_query声明前30,无论如何。

Array ( [title] => Patients [patients] => Array ( [employee_i] => 3321 [first_name] => Zyriel [last_name] => Tanawan [labor_clas] => SD [current_de] => WORKSHOP - L.A [date_emplo] => 2016-04-06 00:00:00 [pay_code] => 06 [cost_cente] => 7723 [file_statu] => EMPLOYEE [middle_nam] => Martinez [vacation_l] => 11.0000 [sick_leave] => 0.0000 [line_code] => Facilities Workshop - Laguna [gender] => M [approver_1] => 950812 [approver_2] => 220364 [approver_3] => 940016 [leave_as_o] => 2017-05-19 00:00:00 [section_ma] => [rest_day1] => Sun [rest_day2] => [Current_po] => Machinist [Station] => Laguna ) )

这是我的model.php的样子。

class Patients_model extends CI_Model
    {
         public function get_patients(){

                $serverName = "MYSERVERNAME"; //serverName\instanceName
                $connectionInfo = array( "Database"=>"MYDATABASE", "UID"=>"USERID", "PWD"=>'MYPASSWORD');
                $conn = sqlsrv_connect( $serverName, $connectionInfo);
                if( $conn === false ) {
                    die( print_r( sqlsrv_errors(), true));
                }

                $sql = "SELECT top 30 * from empmas ORDER BY first_name DESC";
                $stmt = sqlsrv_query( $conn, $sql );
                if( $stmt === false) {
                    die( print_r( sqlsrv_errors(), true) );
                }

                return sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC); 

         }  

}

现在在我的view.php

<?php foreach ($patients as $rows) :?>

            <p><?php echo $rows['employee_i'];?></p><br/>

          <?php endforeach;?>

但我得到下面的错误
遇到PHP错误
严重性:警告
消息:非法字符串偏移量'employee_i'
我已经尝试了一些答案,从其他类似的问题,但它似乎不同,当你使用sqlsrv_query任何建议都会有帮助!谢谢!

hyrbngr7

hyrbngr71#

您的代码中有错误,请检查下面。您必须使用$rows而不是$value

<p><?php echo $rows['employee_i'];?></p><br/>
r7s23pms

r7s23pms2#

sqlsrv_fetch_array返回一行,因此如果在foreach中使用它,则是在 columns 中循环,而不是在rows中循环。
get_patients()中的return语句与以下语句交换可以解决此问题:

$rows = [];
while($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)){
    $rows[] = $row;
}
return $rows;

相关问题