Я не знаю, почему, когда я пытаюсь вызвать процедуру в моем приложении, мой процесс останавливается на SQL Server, и моя страница остается в ожидании вечно.
Я попытался выполнить тот же запрос в SQL Server Management Studio, и у меня был успех, но в моем приложении не слишком много.
Мой контроллер: test.php
class Test extends CI_Controller
{
public function __construct(){
parent::__construct();
}
public function index()
{
$this->load->model('test_model');
$data['test'] = $this->test_model->get_test();
}
}
Моя модель: test_model.php
class Test_model extends CI_Model
{
public function __construct()
{
parent::__construct();
}
public function get_test(){
$query = "Myproc 'param1', 'param2', 'param3'";
$rs = $this->db->query($query)->result_array(); //code stop here
print_r($rs);
die();
}
}
В Codeigniter я пропустил ORM и вызвал процедуры хранения SQL Server, используя PDO.
// This is the Model
class Xm_system_model extends CI_Model {
protected $pdo;
public function __construct() {
parent::__construct();
// variables dsn, db_username, and db_password are stored in a config file
// that's autoloaded.
$this->pdo = new PDO($this->config->item('dsn'), $this->config->item('db_username'), $this->config->item('db_password'));
}// This is a function that calls a sproc using two string parameters.
// (Notice the appalling lack of user input validating
// and error catching. IKR?)
public function get_screens($xlogin = '', $xsystem = '') {
$result = array();
$sql = "exec xs_GetScreens ?, ?";
$param1 = $xlogin;
$param2 = $xsystem;
$ds = $this->pdo->prepare($sql);
$ds->bindParam(1, $param1, PDO::PARAM_STR);
$ds->bindParam(2, $param2, PDO::PARAM_STR);
$ds->execute();
$result = $ds->fetchAll(PDO::FETCH_NUM);
return $result;
}
}
Звонок с контроллера …
public function screens() {
$this->load->model('xm_system_model');
$this->view_data['screen_list'] = $this->xm_system_model->get_screens($xlogin, $xsystem);
$this->load->view("some_view_name", $this->view_data);
}
Я вставил этот код, и он работал
УСТАНАВЛИВАЙТЕ NOCOUNT ON;
public function get_screens($xlogin = '', $xsystem = '') {
$result = array();
$sql = "SET NOCOUNT ON;
exec xs_GetScreens ?, ?
";
$param1 = $xlogin;
$param2 = $xsystem;
$ds = $this->pdo->prepare($sql);
$ds->bindParam(1, $param1, PDO::PARAM_STR);
$ds->bindParam(2, $param2, PDO::PARAM_STR);
$ds->execute();
$result = $ds->fetchAll(PDO::FETCH_NUM);
return $result;
}
}