格式化php查询结果

时间:2014-02-02 14:44:26

标签: php mysql

我有这段代码:

$list_summoners = $con->query("SELECT * FROM verified_users WHERE Username='" . $search_user . "'");

我想知道如何格式化它,例如:

$list_summoners = mysqli_query($con, "SELECT * FROM verified_users WHERE Username='" . $search_user . "'");
    echo '<table align="center" style="text-align:center;"><tr><th>User</th><th>Summoner ID</th><th>Summoner Region</th><th>View Summoner</th></tr>';
    while($row = mysqli_fetch_array($list_summoners)) {
        echo '<tr><td>' . $row['username'] . '</td><td>' . $row['summoner_id'] . '</td><td>' . $row['summoner_region'] .    '</td><td><a href="action.php?do=view_summoner&zone=c&summoner_id=' . $row['summoner_id'] . '&summoner_region=' . $row['summoner_region'] . '"><span class="button color_dark">View</span></a></td></tr>';  
    }
    echo '</table>';

我问这个,因为我知道mysqli_query可以滥用。

提前致谢。

1 个答案:

答案 0 :(得分:0)

在过程模式中调用

mysqli_query($con, 'SELECT...'),在面向对象模式中调用vs $con->query('SELECT...')执行完全相同的函数。在这两种模式中,$con都是同一个对象 - mysqli连接对象,但MySQLi API提供了两种与之交互的方法。

因此,mysqli_query()$con->query()的使用 同样不安全,当您按照使用它们的方式使用时,在变量$search_user中连接。安全方法是完全避免mysqli_query(),而是use a prepared statement

$stmt = $con->prepare('SELECT * FROM verified_users WHERE Username = ?');
if ($stmt) {
  $stmt->bind_param('s', $search_user);
  $stmt->execute();
  // Then bind & fetch()...
}
else echo $con->error;

有关详细信息,请参阅How can I prevent SQL injection in PHP。从准备好的声明中执行和获取的例子。

使用$con->query(),要获取while循环的行,您可以调用$list_summoners->fetch_array(),因为它是class mysqli_result的对象

if ($list_summoners) {
  while ($row = $list_summoners->fetch_array()) {
    echo '<table align="center" style="text-align:center;"><tr><th>User</th><th>Summoner ID</th><th>Summoner Region</th><th>View Summoner</th></tr>';
    echo '<tr><td>' . htmlspecialchars($row['username']) . '</td><td>' . htmlspecialchars($row['summoner_id']) . '</td><td>' .  htmlspecialchars($row['summoner_region']) .    '</td><td><a href="action.php?do=view_summoner&zone=c&summoner_id=' . htmlspecialchars($row['summoner_id']) . '&summoner_region=' . htmlspecialchars($row['summoner_region']) . '"><span class="button color_dark">View</span></a></td></tr>';  
    echo '</table>';
  }
}

请注意,当以HTML格式发送到输出时,会向这些值添加htmlspecialchars()。即使这些不是源于用户输入,但它是一个重要的习惯,因为它会在输出源自用户输入的值或包含需要HTML中的实体编码的字符的值时阻止跨站点脚本。