PHP-您可以使用带有*和ORDERBY的prepared语句吗


PHP - Can you use prepared statements with a * and ORDER BY?

是否可以将准备好的语句与*和ORDER BY一起使用?

因为我不知道怎么做。我已经试了一段时间了。我看了一些其他的线索,但还没有找到如何做到。如果没有,我该如何获得这样的mysqli查询并防止sql注入?

如果有任何想法或批评,我将不胜感激。

谢谢,马特

<?php
    require ($_SERVER['DOCUMENT_ROOT'].'/db-connect.php');
    $conn = new mysqli($servername, $username, $password, $dbname);
    if ($conn->connect_error) {
                    die("Connection failed: " . $conn->connect_error);
    }
    if ($stmt = $conn->prepare("SELECT * FROM websites ORDER BY ? DESC LIMIT 1")){
    $id = 'id';
    $stmt->bind_param('s',$id);
    $stmt->execute();
    $stmt->store_result();
    $result = $stmt->get_result();
    $row = $result->fetch_assoc();
    echo $row['title'];

    $stmt->free_result();
    $stmt->close();
    }
$conn->close();
?>

不能使用占位符作为列名。您需要将其硬编码为:

$stmt = $conn->prepare("SELECT * FROM websites ORDER BY `id` DESC LIMIT 1");

或者做一些类似的事情来允许用户输入:

switch ($_POST['sortby']) {
    // Add all possible column names here
    case 'id':
    case 'col2':
    case 'col3':
    case 'col4':
    case 'col5':
        $sortby = $_POST['sortby'];
        break;
    default:
        throw new Exception("Invalid sort by");
}
$stmt = $conn->prepare("SELECT * FROM websites ORDER BY `$sortby` DESC LIMIT 1");