不能使用准备好的语句

时间:2020-06-14 17:59:30

标签: php sql security mysqli prepared-statement

我有一个小型的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);

出于安全原因,我正在尝试使用准备好的语句,并正在使用此语句进行尝试(我知道此语句的用处不大,但是尽管如此,我仍在使用它,因为它是查看是否准备陈述起作用)

我尝试将其更改为:

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);

结果为NULL

还使用:

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

没有绑定将返回NULL

未准备好的语句可以正常工作。 $ order定义正确。

0 个答案:

没有答案