SQLITE从传递的值

时间:2016-11-21 08:39:56

标签: php sqlite filter

你有一个通过下面传递字符串的函数;

getFilterResults($id, $limit, $misc);

在我的函数中,我连接到SQLite DB并根据传递的值构建查询,如此;

function getFilterResults($id, $limit, $misc) {

  $dbConnect = new SQLite3(database);
  if(!empty($limit) && !empty($id) && !empty($misc)){


        $buildString = ('SELECT * FROM fields ORDER BY id DESC');

        }else{

        //no params filters arrived so dont filter - aka get all results
        $buildString = ("SELECT * FROM fields ORDER BY id DESC");

        }

        $query = $dbConnect->query($buildString);

        //...



}

问题是我如何构建查询,如果某些值为空,我必须决定哪个值使用/启动'WHERE'查询。显然,第一个非null的值返回开始于'WHERE ” ..

我可以看到漫长的方法是循环遍历每一个并构建 - 一旦发现第一个值 not null 并从那里开始,但这似乎不切实际且不是很好的练习。 / p>

    //check if limit set..
    if($limit) {
         $doLimit = 'LIMIT '.$limit.'';
    }

    WHERE 'id = '.id.' AND misc = '.$misc.' '.$doLimit.'

1 个答案:

答案 0 :(得分:1)

你接受($id, $limit, $misc)的功能确实阻止你做任何事情而不是你现在的事情......我建议使用准备好的陈述

// Stores values for a prepared statement
$values = [];

$sqlite = new SQLite3(/* ... */);

$query = 'SELECT * FROM fields WHERE id = ? AND misc = ? ORDER BY id DESC';
$values[] = $id;
$values[] = $misc;

if ($limit) {
    $query .= ' LIMIT ?';
    $values[] = $limit;
}

// Use prepare and let SQLite3 escape the values for you
$stmt = $sqlite->prepare($query);
foreach ($values as $idx => $val) {
    $stmt->bindValue($idx, $val);
}

$result = $stmt->execute();