我有一个包含我的表中列名的选择列表。单击提交按钮时,将显示一个包含列名称的表,但不是显示表中的数据,而是重复选择列表的值。例如,如果选择了teamname。它显示'teamname'4次,因为我的表中有4行,但我希望它显示实际的团队名称而不是'teamname;。
我认为它与我的变量$ select有关,我如何在我的sql语句中使用它或如何将其定义为变量?
它使用选择列表中的值而不是表列中的值。
注意:使用PDO方法。
HTML
<form method='post' action='phpfiles/selectList.php'>
<select name='select'>
<option value='teamname' id='team'>teamname</option>
<option value='city' id='city'>city</option>
<option value='best' id='best'>bestplayer</option>
<option value='year' id='year'>year</option>
<option value='website' id='website'>website</option>
</select>
<br>
<input type='submit' id='selectSubmit' value='Submit Data'>
</form>
PHP
<?php
$select = $_POST['select'];
echo "<table style='border: solid 1px black;'>";
echo "<tr><th>'$select'</th></tr>";
class TableRows extends RecursiveIteratorIterator {
function __construct($it) {
parent::__construct($it, self::LEAVES_ONLY);
}
function current() {
return "<td style='width:150px;border:1px solid black;'>" . parent::current(). "</td>";
}
function beginChildren() {
echo "<tr>";
}
function endChildren() {
echo "</tr>" . "\n";
}
}
if ($_SERVER["REQUEST_METHOD"] == "POST"){
// server and database information
$servername = "localhost";
$username = "";
$password = "";
$dbname = "";
$select = $_POST['select'];
try {
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $conn->prepare("SELECT '$select' FROM teams");
$stmt->execute();
// set the resulting array to associative
$result = $stmt->setFetchMode(PDO::FETCH_ASSOC);
foreach(new TableRows(new RecursiveArrayIterator($stmt->fetchAll())) as $k=>$v) {
echo $v;
}
}
catch(PDOException $e) {
echo "Error: " . $e->getMessage();
}
$conn = null;
echo "</table>";
}
?>
答案 0 :(得分:0)
请勿使用'
引号:
$stmt = $conn->prepare("SELECT $select FROM teams");
或者更好,使用&#34;`&#34;引用它:
$stmt = $conn->prepare("SELECT `$select` FROM teams");
'
将其标记为要为sql查询输出的简单字符串,而不是列名称(您想要的)。