pdo dinamik artan / azalan bağlama sırasını

2 Cevap php

Diyelim ki sırayla tek fark (artan vs Azalan) 2 pdo ifadeleri var diyelim

$stmt1 = $po->prepare("SELECT * FROM tabname WHERE categ=:categ ORDER BY field1 DESC");
$stmt2 = $po->prepare("SELECT * FROM tabname WHERE categ=:categ ORDER BY field1 ASC");

Ben dinamik yüzden olabilir ASC / DESC bağlayabilirsiniz bir yolu var mı sadece 1 stmt

$order = "ASC"; //or "DESC"

$stmt = $po->prepare("SELECT * FROM tabname WHERE categ=:categ ORDER BY field1 order=:order");
$stmt->bindParam(':order', $order, PDO::PARAM_STR);

2 Cevap

hayır. parametreleri otomatik olarak kote edilir ve ASC / DESC alıntı olmamalıdır. Bu tablo ve sütun isimleri parametre olamayacağını aynı nedenidir.

Ne yaptım "task_order" denilen $ _SESSION bir değişken oluşturmak ve varsayılan olarak 0 olarak ayarlayın oldu. Ardından, sql deyiminde ben ASC veya DESC sql deyimi ilave gerekip gerekmediğini belirleyen bir özel işlev / switch deyimi diyoruz. O 0 ise, o zaman "ASC" döner ve 1 "task_order" ayarlar. Durum 1 ise, tam tersini yapar. Yani bir "geçiş" mekanizması gibi çalışır.

Bu eski bir soru / konu anlıyorum, ama ben aranması üzerine tökezledi, belki başkası da olacak. Daha iyi bir fikrin varsa, lütfen paylaşın!

EDIT: bazı eski kodu bulundu:

$ Sql ​​= "öncelik TARAFINDAN sahibi =? SİPARİŞ görevler SELECT * FROM". $ This-> check_sort_status (). "";

ve çağrı yöntemdir:

public function check_sort_status() {

 switch ($_SESSION["asc"]) {
    case 0:
        $_SESSION["asc"] = 1;
        return "ASC";
    case 1:
        $_SESSION["asc"] = 0;
        return "DESC";
}