首页 > 解决方案 > 不能使用准备好的语句

问题描述

我有一个小的 MVC 框架。

在 db 类中:

public static function getInstance() {

        if (!self::$instance) {
            //self::$instance = new PDO("mysql:host=".self::$servername.";dbname=".self::$db.", '".self::$user."', '".self::$pass."'");
            // self::$instance-> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            self::$instance = new mysqli(self::$servername, self::$user, self::$pass,self::$db);
            if (self::$instance->connect_error) {
                die("Connection failed: " . self::$instance->connect_error);
            }
        }
        return self::$instance;
    }

在我的课堂上:

$sql = "SELECT * FROM rego_details ORDER BY ".$order." ASC";
        $db =  $registry->db;
        $result = $db->query($sql);

出于安全原因,我正在尝试使用准备好的语句,并正在使用此语句进行尝试(我知道它对这个语句没有多大用处,但我仍然使用它,因为它是一个简单的语句来查看是否 prep. statements工作)

我尝试将其更改为:

if(!($stmt = $db->prepare('SELECT * FROM rego_details ORDER BY ? ASC'))){
    echo 'prepare failed!';
}

if(!($stmt->bind_param("s", $order))){
    echo 'bind failed!';
}

$stmt->execute();
$result = $stmt->get_result();
var_dump($result);

结果为空

还使用:

$stmt = $db->prepare('SELECT * FROM rego_details ORDER BY id ASC')

没有绑定返回 NULL

未经准备的陈述工作正常。$order 定义正确。

标签: phpsqlsecuritymysqliprepared-statement

解决方案


推荐阅读