Функция concat в ответном файле Ajax Php ломает скрипт - PullRequest
0 голосов
/ 21 мая 2018

Я пытаюсь объединить две переменные в файле ответов php сценария Ajax.

Файл ответов выглядит следующим образом:

$company_id=$_POST['company']:
$query="SELECT `contact_company`.`contact_id`, CONCAT(`surname`,' '.`fname`), `contact_company`.`company_id` FROM `seta`.`contact_company` AS `contact_company`, `seta`.`contacts` AS `contacts` WHERE `contact_company`.`contact_id` = `contacts`.`contact_id` AND `contact_company`.`company_id` ='".$company_id."' ";

$result=mysqli_query($connection,$query) or die ("Query to get data from contact_company table failed: ".mysqli_connect_error());


while ($row=mysqli_fetch_array($result)) {
    $contact_id=$row["contact_id"];
    $company_id=$row["company_id"];
    $contact_name=$row["CONCAT(`surname`,' ',`fname`)"];

    echo "<option value=\"$contact_id\">
         $contact_name
         </option>";
    }

Хотя этот синтаксис CONCAT отлично работает вдругие файлы php, это не здесь.Кто-нибудь может посоветовать, пожалуйста?С уважением

Томмазо

Ответы [ 4 ]

0 голосов
/ 21 мая 2018

У вас проблема с функцией sql CONCATE, это должно быть:

CONCAT( фамилия ,' ', имя_файла )

 $company_id=$_POST['company']:
    $query="SELECT `contact_company`.`contact_id`, CONCAT(`surname`,' ',`fname`), `contact_company`.`company_id` FROM `seta`.`contact_company` AS `contact_company`, `seta`.`contacts` AS `contacts` WHERE `contact_company`.`contact_id` = `contacts`.`contact_id` AND `contact_company`.`company_id` ='".$company_id."' ";

    $result=mysqli_query($connection,$query) or die ("Query to get data from contact_company table failed: ".mysqli_connect_error());


    while ($row=mysqli_fetch_array($result)) {
        $contact_id=$row["contact_id"];
        $company_id=$row["company_id"];
        $contact_name=$row["CONCAT(`surname`,' ',`fname`)"];

        echo "<option value=\"$contact_id\">
             $contact_name
             </option>";
        }
0 голосов
/ 21 мая 2018

Используйте псевдонимы в вашем sql запросе.В данном случае это полное имя для результата CONCAT(..).

$query="SELECT `contact_company`.`contact_id`, CONCAT(`surname`,' '.`fname`) as fullname, `contact_company`.`company_id` FROM `seta`.`contact_company` AS `contact_company`, `seta`.`contacts` AS `contacts` WHERE `contact_company`.`contact_id` = `contacts`.`contact_id` AND `contact_company`.`company_id` ='".$company_id."' ";

В вашем цикле while замените его следующим:

$contact_name=$row["fullname"];

Также вы завершили свое первое выражение вместо двоеточия :точки с запятой ;

Измените первую строку на:

$company_id=$_POST['company'];
0 голосов
/ 21 мая 2018

Похоже, что основная проблема здесь в том, что вы завершили оператор php двоеточием, а не точкой с запятой, то есть $_POST['company']:.

Кроме того, в MySQL CONCAT есть проблемафункция.В вашем коде оно имеет:

`CONCAT(`surname`,' '.`fname`)`

Это должно разделять каждый строковый литерал или поле запятой.Кроме того, у вас есть начальный период . перед fname, например:

`CONCAT(`surname`, ' ', `fname`)`

Или, если поле fname появляется в более чем одной из таблиц, поэтому требуется псевдоним, вы должны указатьэто:

`CONCAT(`surname`, ' ', `contacts`.`fname`)`

Исправленная версия ниже, попробуйте это.

    $company_id = $_POST['company'];
    $query = "SELECT `contact_company`.`contact_id`, CONCAT(`surname`, ' ', `fname`) AS `fullname`, `contact_company`.`company_id` FROM `seta`.`contact_company` AS `contact_company`, `seta`.`contacts` AS `contacts` WHERE `contact_company`.`contact_id` = `contacts`.`contact_id` AND `contact_company`.`company_id` ='" . mysqli_real_escape_string($company_id) . "' ";

    $result = mysqli_query($connection, $query) or die("Query to get data from contact_company table failed: " . mysqli_connect_error());


    while ($row = mysqli_fetch_array($result)) {
        $contact_id = $row["contact_id"];
        $company_id = $row["company_id"];
        $contact_name = $row["fullname"];

        echo "<option value=\"$contact_id\">
             $contact_name
             </option>";
    }
0 голосов
/ 21 мая 2018

Ваш синтаксис CONCAT неверен.Пожалуйста, см. Ниже для правильной версии.

$query="SELECT `contact_company`.`contact_id`, CONCAT(`surname`,' ',`fname`), `contact_company`.`company_id` FROM `seta`.`contact_company` AS `contact_company`, `seta`.`contacts` AS `contacts` WHERE `contact_company`.`contact_id` = `contacts`.`contact_id` AND `contact_company`.`company_id` ='".$company_id."' ";

Надеюсь, это поможет.

...