来自查询的MySQL语法错误的动态Html表

时间:2017-06-28 11:13:05

标签: php html mysql

我是从数据库中事件字段的下拉框中选择的动态创建HTML。它与简单的SQL查询$selectStmt = $con->prepare('SELECT * FROM men WHERE event like :start');完美配合。但是,我想运行一个复杂的查询,然后得到一个

  

解析错误:语法错误,意外'',姓氏)AS''   (T_CONSTANT_ENCAPSED_STRING)。

我不确定它是查询还是后面的代码,如长查询的行号。该查询在其他非动态生成的脚本中完美运行。请帮忙。

我的代码:

<?php

    $dsn = 'mysql:host=localhost;dbname=****';
    $username = '****';
    $password = '****';
    try {
        $con = new PDO($dsn, $username, $password);
        $con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    } catch (Exception $ex) {
        echo 'Not Connected '.$ex->getMessage();
    }
    $tableContent = '';
    $start = '';
    $selectStmt = $con->prepare('SELECT * FROM men');
    $selectStmt->execute();
    $users = $selectStmt->fetchAll();
    foreach ($users as $user) {
        $tableContent = $tableContent.'<tr>'.
                '<td>'.$user['id'].'</td>'
                .'<td>'.$user['name'].'</td>'
                .'<td>'.$user['surname'].'</td>'
                .'<td>'.$user['event'].'</td>'
                .'<td>'.$user['performance'].'</td>';
    }

    if(isset($_POST['search']))
    {
       $start = $_POST['start'];
       $tableContent = '';
       $selectStmt = $con->prepare('SELECT rank, performance, wind,athlete,dob,prov,pos,place,date FROM (SELECT performance, wind,name,surname,dob,prov,pos,place,date, @curRank := IF(@prevRank = performance, @curRank, @incRank) AS rank, @incRank := @incRank + 1, @prevRank := performance, CONCAT(name,' ',surname) AS 'athlete' FROM men p, ( SELECT @curRank :=0, @prevRank := NULL, @incRank := 1 ) r WHERE event like :start ORDER BY performance) s');
       $selectStmt->execute(array(
             ':start'=>$start.'%'
       ));
       $users = $selectStmt->fetchAll();
       foreach ($users as $user){
           $tableContent = $tableContent.'<tr>'.
                '<td>'.$user['id'].'</td>'
                .'<td>'.$user['name'].'</td>'
                .'<td>'.$user['surname'].'</td>'
                .'<td>'.$user['event'].'</td>'
                .'<td>'.$user['performance'].'</td>';
       }
    }
?>

2 个答案:

答案 0 :(得分:1)

你有单引号的组合给出错误:

改变这个:

$selectStmt = $con->prepare("SELECT rank, performance,
wind,athlete,dob,prov,pos,place,date FROM (SELECT performance, wind,name,surname,dob,prov,pos,place,date, @curRank := IF(@prevRank =
performance, @curRank, @incRank) AS rank, @incRank := @incRank + 1,
@prevRank := performance, CONCAT(name,' ',surname) AS 'athlete'
FROM men p, ( SELECT @curRank :=0, @prevRank := NULL, @incRank := 1 ) r
WHERE event like :start ORDER BY performance) s");

答案 1 :(得分:0)

CONCAT(name,' ',surname) AS 'athlete'中删除运动员别名中的引号并尝试以下内容,

$selectStmt = $con->prepare('SELECT rank, performance, wind,athlete,dob,prov,pos,place,date FROM 
 (SELECT performance, wind,name,surname,dob,prov,pos,place,date,
  @curRank := IF(@prevRank = performance, @curRank, @incRank) AS rank, 
  @incRank := @incRank + 1, @prevRank := performance,
  CONCAT(name,' ',surname) AS athlete FROM men p,
  ( SELECT @curRank :=0, @prevRank := NULL, @incRank := 1 ) r
  WHERE event like :start ORDER BY performance) s');