我想从表中获取所有数据并将其显示在html表中,但是我不确定如何使用准备好的语句来保护我免受sql注入。

我读过它应该看起来像:

$getPlayers = $db->prepare("SELECT * FROM Player WHERE name = :name");


但是我不确定如何使用“ WHERE”方法从数据库中获取所有数据。

到目前为止,这是我的代码。它可以正常工作并获取我所有的数据,但我认为它不受sql注入的影响,对吗?

$getPlayers = $db->prepare("SELECT * FROM Player");
$getPlayers->execute();

$players = $getPlayers->fetchAll();

echo "<table>";
echo "<tr><th>Name</th><th>Games Played</th><th>Tries</th></tr>";


foreach( $players as $row) {
    echo "<tr>";
    echo "<td>".$row['name']."</td>";
    echo "<td>".$row['games_played']."</td>";
    echo "<td>".$row['tries']."</td>";
    echo "</tr>";
}

echo "</table>";

最佳答案

SQL注入只是需要将用户输入的数据发送到数据库的问题。
SELECT * FROM Player这样的查询不包含用户数据。因此,从SQL Injection完全是安全的。

实际上,在这种情况下,使用准备好的语句没有任何好处。当一个准备好的语句执行时,它将对数据库进行两次调用。

你可以这样做:

$getPlayers = $db->query("SELECT * FROM Player");
foreach ($getPlayers as $player) {
  // do something
}


没有准备,没有绑定,只有一个对数据库的调用。

关于php - PDO-使用准备好的语句将所有sql数据放入html表中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21152145/

10-12 13:59
查看更多