1
我想添加選項以選擇通過使用下拉列表來排列SELECT語句的內容。我以前工作的SELECT語句將從我的表中選擇數據,並按點排序。現在,我希望能夠通過點或目標,或協助訂購等等等等SELECT語句PDO將一個變量添加到ORDER BY子句
這裏是我以前的工作聲明:
$query = $db->prepare("SELECT player_stats.*, teams.*
FROM player_stats
LEFT JOIN teams ON player_stats.tid = teams.teamid
WHERE season = :season
ORDER BY points DESC
LIMIT 20");
$query->bindParam(':season', $season);
$query->execute();
$result = $query->fetchAll();
以前的工作方式:
<form action= "<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" method="get" id="search">
<select name='statsYear' id='statsYear' class='dropDown' onchange='this.form.submit()'>
<option <?php if (($_GET['statsYear'] == '20162017') || !isset($_GET['statsYear'])) { ?>selected="true" <?php }; ?>value="20162017">2016-2017</option>
<option <?php if ($_GET['statsYear'] == '20152016') { ?>selected="true" <?php }; ?>value="20152016">2015-2016</option>
<option <?php if ($_GET['statsYear'] == '20142015') { ?>selected="true" <?php }; ?>value="20142015">2014-2015</option>
<option <?php if ($_GET['statsYear'] == '20132014') { ?>selected="true" <?php }; ?>value="20132014">2013-2014</option>
<option <?php if ($_GET['statsYear'] == '20122013') { ?>selected="true" <?php }; ?>value="20122013">2012-2013</option>
</select>
</form>
這裏是我的新選擇STAGE給出了不正確的輸出。我將分享一個鏈接到不正確輸出以後:
$query = $db->prepare("SELECT player_stats.*, teams.*
FROM player_stats
LEFT JOIN teams ON player_stats.tid = teams.teamid
WHERE season = :season
ORDER BY :statstype DESC
LIMIT 20");
$query->bindParam(':season', $season);
$query->bindParam(':statstype', $statsType);
$query->execute();
$result = $query->fetchAll();
echoTable($result);
上面的查詢不承認新$statsType
變量。這是我需要幫助的地方。下面是引用我的新形式和變量聲明:
if (isset($_GET['statsType'])) {
$statsType = $_GET['statsType'];
} else {
$statsType = 'points' ;
}
<form action= "<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" method="get" id="search">
<select name='statsYear' id='statsYear' class='dropDown' onchange='this.form.submit()'>
<option <?php if (($_GET['statsYear'] == '20162017') || !isset($_GET['statsYear'])) { ?>selected="true" <?php }; ?>value="20162017">2016-2017</option>
<option <?php if ($_GET['statsYear'] == '20152016') { ?>selected="true" <?php }; ?>value="20152016">2015-2016</option>
<option <?php if ($_GET['statsYear'] == '20142015') { ?>selected="true" <?php }; ?>value="20142015">2014-2015</option>
<option <?php if ($_GET['statsYear'] == '20132014') { ?>selected="true" <?php }; ?>value="20132014">2013-2014</option>
<option <?php if ($_GET['statsYear'] == '20122013') { ?>selected="true" <?php }; ?>value="20122013">2012-2013</option>
</select>
<select name="statsType" id="statsType" class="dropDown" onchange='this.form.submit()'>
<option <?php if ($_GET['statsType'] == 'points' || !isset($_GET['statsType'])) { ?>selected="true" <?php }; ?> value="points">Points</option>
<option <?php if ($_GET['statsType'] == 'goals') { ?>selected="true" <?php }; ?> value="goals">Goals</option>
<option <?php if ($_GET['statsType'] == 'assists') { ?>selected="true" <?php }; ?>value="assists">Assists</option>
<option <?php if (($_GET['statsType'] == 'pim')) { ?>selected="true" <?php }; ?>value="pim">PIM</option>
<option <?php if ($_GET['statsType'] == 'pm') { ?>selected="true" <?php }; ?>value="pm">+/-</option>
<option <?php if (($_GET['statsType'] == 'toi')) { ?>selected="true" <?php }; ?>value="toi">TOI</option>
</select>
</form>
這是查詢應該是什麼樣子,如果我在表單中選擇助攻:
這是實際的輸出:
http://sjsharktank.com/leaders.php?statsYear=20162017&statsType=assists
我不得不添加單引號爲嵌套的原因,但這似乎並沒有改變任何東西。編輯:我刪除了「...」,它的工作原理,但現在我有整個SQL注入認爲你提到的問題。 –
爲什麼你必須添加單引號?你可以肯定你在$ statstype中有一個正確的值。(試試var_dump($ statstype)。並且檢查最後的查詢命令var_dump($ query) – scaisEdge
'ORDER BY $ statstype DESC'正在運行' –