Ajax 响应 Php 文件中的 Concat 函数破坏了脚本

Concat function in the Ajax response Php file breaks the script

我正在尝试在 Ajax 脚本的 php 响应文件中连接两个变量。

响应文件如下:

$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 文件中可以完美运行,但在这里却不行。有人可以建议吗? 谢谢 此致

托马索

您的 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."' ";

希望对您有所帮助。

在您的 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'];

这里的主要问题似乎是您用冒号而不是分号结束了 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>";
    }

您的 sql CONCAT 函数有问题,应该是:

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>";
        }