В настоящее время я работаю над проектом, я начал исследование и сделал его в mysql с Xampp, но сейчас я хотел бы изменить его на mssql, у меня работает строка подключения, но в datatables отображается ошибка.
Это код (отлично работает с mysql):
<?php
include('db.php');
include('function.php');
$query = '';
$output = array();
$query .= "SELECT * FROM item ";
$statement = $connection->prepare($query);
$statement->execute();
$result = $statement->fetchAll();
$data = array();
$filtered_rows = $statement->rowCount();
foreach($result as $row)
{
$sub_array = array();
$sub_array[] = $row["id"];
$sub_array[] = $row["item_id"];
$sub_array[] = $row["item_name"];
$sub_array[] = $row["brand"];
$sub_array[] = $row["description"];
$sub_array[] = $row["category"];
$sub_array[] = $row["serial_no"];
$sub_array[] = $row["consumable"];
$sub_array[] = $row["d_date"];
$sub_array[] = $row["rs_no"];
$sub_array[] = $row["rr_no"];
$sub_array[] = $row["po_no"];
$sub_array[] = $row["tag_no"];
$sub_array[] = $row["transcode"];
$sub_array[] = $row["supplier"];
$sub_array[] = $row["d_added"];
$sub_array[] = $row["p_account"];
$sub_array[] = $row["c_account"];
$sub_array[] = $row["status"];
$sub_array[] = $row["con"];
$sub_array[] = $row["location"];
$data[] = $sub_array;
}
$output = array(
"draw" => intval($_POST["draw"]),
"recordsTotal" => $filtered_rows,
"recordsFiltered" => get_total_all_records(),
"data" => $data
);
echo json_encode($output);
?>
это код для function.php:
<?php
function get_total_all_records()
{
include('db.php');
$statement = $connection->prepare("SELECT * FROM item");
$statement->execute();
$result = $statement->fetchAll();
return $statement->rowCount();
}
?>
и для db.php:
$connection = new PDO( "sqlsrv:Server=sqlserver;Database=testdb", "username","password");
при загрузке таблицы отображается неверный ответ json:
![enter image description here](https://i.stack.imgur.com/WKs9K.png)
Это ошибка, полученная отладчиком:
Fatalошибка: Uncaught PDOException: SQLSTATE [08001]: [Microsoft] [Драйвер ODBC 13 для SQL Server] Поставщик TCP: не удалось установить соединение, поскольку целевой компьютер активно отказал ему.в C: \ xampp \ htdocs \ material \ upload \ start1 \ examples \ db.php: 3 Трассировка стека: # 0 C: \ xampp \ htdocs \ материал \ upload \ start1 \ examples \ db.php (3): PDO-> __ construct ('sqlsrv: Server = d ...', '', '') # 1 C: \ xampp \ htdocs \ material \ upload \ start1 \ examples \ fetch.php (2): include ('C: \xampp \ htdocs ... ') # 2 {main}, добавленный в C: \ xampp \ htdocs \ material \ upload \ start1 \ examples \ db.php в строке 3.
Я используюправильные учетные данные также.
----- Обновление 2 ------
Мне удалось запустить его локально, возможно, что-то на удаленном сервере блокирует соединение.
Теперь я пытаюсь заставить его работать с поиском в datatables с помощью этой строки кодов, которая работает с PDO mysql.
if(isset($_POST["search"]["value"]))
{
$query .= 'WHERE item_id LIKE "%'.$_POST["search"]["value"].'%"';
$query .= 'OR item_name LIKE "%'.$_POST["search"]["value"].'%"';
$query .= 'OR status LIKE "%'.$_POST["search"]["value"].'%"';
}
if(isset($_POST["order"]))
{
$query .= 'ORDER BY '.$_POST['order']['0']['column'].' '.$_POST['order'] ['0']['dir'].' ';
}
else
{
$query .= 'ORDER BY id DESC ';
}
if($_POST["length"] != 1)
{
$query .= 'LIMIT ' . $_POST['start'] . ', ' . $_POST['length'];
}
----- Обновление 3 ------
Привет!Мне удалось заставить его работать, это было только из-за qoutes.
вот рабочий код:
if(isset($_POST["search"]["value"]))
{
$query .= " WHERE item_id LIKE '%".$_POST["search"]["value"]."%' ";
$query .= " OR item_name LIKE '%".$_POST["search"]["value"]."%' ";
$query .= " OR status LIKE '%".$_POST["search"]["value"]."%' ";
}
if(isset($_POST["order"]))
{
$query .= "ORDER BY '".$_POST['order']['0']['column']."' '".$_POST['order']['0']['dir']."' ";
}
else
{
$query .= "ORDER BY id DESC ";
}
Моя остающаяся проблема теперь для функции LIMIT.он не работает даже после изменения qoutes в соответствии с синтаксисом mssql.Ты заранее.
if($_POST["length"] != -1)
{
$query .= "LIMIT '" . $_POST['start'] . "', " . $_POST['length'];
}