PHP Mysql PDO для MSSQL / json / jquery / datatables - PullRequest
0 голосов
/ 20 февраля 2019

В настоящее время я работаю над проектом, я начал исследование и сделал его в 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

Это ошибка, полученная отладчиком:

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'];
}

1 Ответ

0 голосов
/ 20 февраля 2019

Я думаю, что в вашем json отсутствует строка "user_data"

Но почему вы помещаете массив, внутри массива, внутри массива?

$data = array();
foreach($result as $k => $row)
{
   $data[$k] = $row;
}
$output = array(
    "draw"              =>  intval($_POST["draw"]),
    "recordsTotal"      =>  $filtered_rows,
    "recordsFiltered"   =>  get_total_all_records(),
    "data"              =>  $data
);
echo json_encode($output);

, если не работает, откройте инспектор в сетии проверьте свой JSON ответить

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...