转换SQL查询以用于PHP表单(变量问题)

转换SQL查询以用于PHP表单(变量问题),php,mysql,Php,Mysql,我有一个SQL查询,看起来像: SET @fromyear = 1980; SET @toyear = 1989; SET @rank = 0; SELECT test.Rank, test.Artist, test.Nominations FROM( SELECT @rank:=@rank+1 as Rank, noms.Artist, noms.Nominations FROM ( SELECT COUNT(Name) as Nominations, Name as Art

我有一个SQL查询,看起来像:

SET @fromyear = 1980;
SET @toyear = 1989;


SET @rank = 0;

SELECT test.Rank, test.Artist, test.Nominations

FROM(


SELECT 
@rank:=@rank+1 as Rank, 
noms.Artist, 
noms.Nominations
FROM
(
SELECT COUNT(Name) as Nominations, Name as Artist
FROM Nominated
WHERE Year BETWEEN @fromyear AND @toyear
GROUP BY Name
ORDER BY Nominations DESC
) as noms

) as test

WHERE Rank BETWEEN 1 AND 5
它返回类似于:

Rank    Artist              Nominations
1       Michael Jackson     6
2       Lionel Richie       6
// through 5
SQL查询在phpMyAdmin上运行良好。我试图将其转换为与PHP表单一起使用。我已经很接近了:

<?php

$YEAR1POST=$_POST['YEAR1'];  // user enters YEAR1 and YEAR2
$YEAR2POST=$_POST['YEAR2'];
$Rank = 0;
$ONE = 1;

$sql = "        

SELECT test.Rank, test.Artist, test.Nominations

FROM(


SELECT 
\"$Rank\" =  (  \"$Rank\" + \"$ONE\"  ) AS Rank, 
noms.Artist, 
noms.Nominations

FROM
    (
    SELECT COUNT(Name) as Nominations, Name as Artist
    FROM Nominated
    WHERE Year BETWEEN \"$YEAR1POST\" AND \"$YEAR2POST\"
    GROUP BY Name
    ORDER BY Nominations DESC
    ) as noms

    ) as test

WHERE Rank  = 1

";

$result = mysql_query($sql, $connect);

while($row = mysql_fetch_assoc($result))
{

$rank = $row['Rank'];
$artist = $row['Artist'];
$nominations = $row['Nominations'];

echo "[Rank:] ". $rank;
echo "<br> [Artist:] ". $artist;
echo "<br> [Nominations:] ". $nominations;
echo "<br>";
echo "<br>";
}

 ?>
我只是不知道如何转换:

SELECT 
@rank:=@rank+1 as Rank,  

用于PHP表单。谢谢,SQL不是程序性的。您的SQL脚本引入了一个带有秩的过程元素,但PHP已经是一种过程语言

如果仅提取基本查询:

$sql = 
"SELECT COUNT(Name) as Nominations, Name as Artist
FROM Nominated
WHERE Year BETWEEN '$YEAR1POST' AND '$YEAR2POST'
GROUP BY Name
ORDER BY Nominations DESC";
然后返回相同的结果集,减去排名。您可以使用PHP变量,以与SQL客户端脚本相同的方式生成秩

$rank = 1;
while($row = mysql_fetch_assoc($result)) {

    $artist = $row['Artist'];
    $nominations = $row['Nominations'];

    echo "[Rank:] ". $rank;
    echo "<br> [Artist:] ". $artist;
    echo "<br> [Nominations:] ". $nominations;
    echo "<br>";
    echo "<br>";
    $rank++;
}
$rank=1;
while($row=mysql\u fetch\u assoc($result)){
$artist=$row['artist'];
$namignations=$row['namignations'];
回声“[Rank:]”$Rank;
回声“
[艺术家:”$Artist; echo“
[提名:”$提名; 回声“
”; 回声“
”; $rank++; }

虽然在这一点上有些敷衍,但您现在真的应该使用mysqli或PDO了——mysql_u;api很快就会从PHP中完全删除。只要您使用绑定变量,就SQL注入和消除字符串转义的需要而言,这些都要安全得多。

非常感谢!我也很感谢你指导我使用mysqli或PDO。从SQL/PHPNo开始,如果必须选择PDO/MySQL,我个人会推荐使用它。
$rank = 1;
while($row = mysql_fetch_assoc($result)) {

    $artist = $row['Artist'];
    $nominations = $row['Nominations'];

    echo "[Rank:] ". $rank;
    echo "<br> [Artist:] ". $artist;
    echo "<br> [Nominations:] ". $nominations;
    echo "<br>";
    echo "<br>";
    $rank++;
}