我是从数据库中事件字段的下拉框中选择的动态创建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>';
}
}
?>
答案 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');