mysqli通过href链接选择查询

时间:2014-10-24 04:11:25

标签: php mysql mysqli

我目前正在切换我在Dreamweaver中制作的网站,该网站使用了大量的mysql到mysqli以获得更好的安全性。

我的网站以准备声明开始:

if (!isset($_GET['orderby']) or ($_GET['orderby'])=="Something") {
    $orderby = "Something Else";
} else {
  $orderby = $_GET['orderby'];
}

if ($stmt = $local->prepare("SELECT * FROM Table ORDER BY ? ASC LIMIT 0,10")) {
    $param = "Table." . $orderby;
    $stmt->bind_param('s', $param);
    $stmt->execute();
    $Recordset1 = $stmt->get_result();
    $row_Recordset1 = $Recordset1->fetch_assoc();
    $stmt->close();
}

这被调用,表格在我的网站上制作。我曾经在表格上方有4个HREF链接,这些链接会更改所选列('?')并使用新查询刷新页面(PHP_self)。

<?php 

echo '<a href='.htmlspecialchars($_SERVER["PHP_SELF"], ENT_QUOTES, "utf-8").'?orderby=Up>Popularity</a>';

?>

每当我点击链接时,它会添加&#34;?orderby = Up&#34;到地址但不刷新查询。我是否以错误的方式设置准备好的声明以实现此目的?

1 个答案:

答案 0 :(得分:1)

是的,准备好的陈述很好,但限制是:

您无法绑定表/列名称。

你可以将它们列入白名单:

// define your table columns
$columns_on_that_table = array('id', 'name', 'date');
if (isset($_GET['orderby']) && in_array($_GET['orderby'])) {
    $orderby = $_GET['orderby']
} else {
    $orderby = 'id'; // default order column
}

$row_Recordset1 = array();
if ($stmt = $local->prepare(" SELECT * FROM Table ORDER BY `$orderby` ASC LIMIT 0,10 ")) {

    $stmt->execute();
    $Recordset1 = $stmt->get_result();
    // loop them if you want more than one row
    while($row = $Recordset1->fetch_assoc()) {
        $row_Recordset1[] = $row;
    }
    $stmt->close();

}