mysql限制子句不与php bindvalue

时间:2018-04-11 08:49:48

标签: php mysql

在尝试创建分页后,我注意到 PHP bindValue在与 MySQL 一起使用时不起作用ORDER BYLIMIT条款。

考虑到它可以在 MySQL 中的任何其他地方工作,这是非常奇怪的(至少就我所知)。例如,这完全正常:

SELECT * FROM table WHERE foo = ? AND bar = ?

然而,在尝试类似的事情时:

SELECT * FROM table ORDER BY date DESC LIMIT ?, ?

它将返回一个空对象。

这就是我执行查询的方式(请注意,这些都是简化的,我使用的功能都是class的一部分):

// query function
function query($sql, $params){
    if($query = $pdo->prepare($sql)){
        $x = 1;
        if(count($params)){
            foreach($params as $param){
                $query->bindValue($x, $param);
                $x++;
            }
        }

        if($query->execute()){
            return $query->fetchAll(PDO::FETCH_OBJ);
        } else {
            return false;
        }
    }
}

// executing a query (this will return an empty object)
$query = query("SELECT * FROM table ORDER BY date DESC LIMIT ?, ?", array(0, 10));
var_dump($query);

似乎无法想出这一点,所以感谢所有的帮助,

干杯。

1 个答案:

答案 0 :(得分:0)

你的Params将作为字符串包含在内。使用常量来告诉bindValue将值绑定为int。

for(int i=0; i<bits.length()-1; i++){
        k = i+1;
        while((bits.charAt(k)==bits.charAt(i)) && k<bits.length() ) {
            counter++;
            k++;
        }
        if(bits.charAt(i)=='1'&& counter % 3==0)
            morseCode.append('-');
        else if(bits.charAt(i)=='1')
            morseCode.append('.');

        counter = 1;
        }