我正在尝试从外部sql数据库中获取员工列表,我已经知道使用常规PHP页面来获取它,但我是codeigniter的新手,我想尝试一下这是否可以工作。
所以我的控制器.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 ) )
这是我的模型.php看起来像。
class Patients_model extends CI_Model
{
public function get_patients(){
$serverName = "MYSERVERNAME"; //serverNameinstanceName
$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);
}
}
现在在我看来.php
<?php foreach ($patients as $rows) :?>
<p><?php echo $rows['employee_i'];?></p><br/>
<?php endforeach;?>
但是我收到下面的错误
遇到 PHP 错误
严重性:警告
消息:非法字符串偏移量"employee_i">
我已经尝试了其他类似问题的一些答案,但是当您使用sqlsrv_query
时似乎有所不同,任何建议都会有所帮助! 谢谢!
您的代码中有错误,请检查以下内容。你必须使用$rows
而不是$value
<p><?php echo $rows['employee_i'];?></p><br/>
sqlsrv_fetch_array
返回一行,因此如果您在 foreach
中使用它,您将循环访问列,而不是行。
将 get_patients()
中的 return 语句与以下内容交换将解决此问题:
$rows = [];
while($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)){
$rows[] = $row;
}
return $rows;