Php MySQL绑定变量,限制为默认为无

Php MySQL绑定变量,限制为默认为无,php,mysql,Php,Mysql,除非我指定了一个限制 $values = [ ':limit' => $this->limit, ':offset' => $this->offset ]; 通过设置$this->limit,我希望此绑定默认为无限制 const QUERY = "SELECT * FROM Project LIMIT :limit OFFSET :offset"; 我试过类似的方法 $values = [ ':l

除非我指定了一个限制

    $values = [
        ':limit' => $this->limit,
        ':offset' => $this->offset
    ];
通过设置
$this->limit
,我希望此绑定默认为无限制

const QUERY = "SELECT * FROM Project LIMIT :limit OFFSET :offset";
我试过类似的方法

    $values = [
        ':limit' => $this->limit ? $this->limit : null,
        ':offset' => $this->offset
    ];

但是我想知道SQL中是否有一个关键字可以忽略限制标志。也就是说,
limitall
——如果这有意义的话。

最好的方法是在PHP代码中解决这个问题,这样在不使用LIMIT时就不会使用关键字LIMIT。如果确实要使用关键字LIMIT并仍然指定显示所有行,则mysql文档状态为:

要检索从某个偏移量到结果集末尾的所有行,可以对第二个参数使用一些较大的数字。此语句检索从第96行到最后一行的所有行:


所以解决方法就是使用一个非常大的数字(bigint的最大值)。是的,我知道。。MySQL很糟糕。

改变你的想法

$values = [
    ':limit' => $this->limit,
    ':offset' => $this->offset
];

const QUERY = "SELECT * FROM Project";
const LIMIT = " LIMIT :limit OFFSET :offset";

$query = QUERY;

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

// now do parameter substitution, 
// testing again if you need to add the limit params

您不应该使用SQL解决这个问题,这是应用程序层的问题,而不是数据库层的问题。您可以使用两个查询,一个用于限制查询,一个不用于限制查询。我仍然建议使用ORM,这将以更好的方式解决您的问题way@RiggsFolly我之所以希望在其中包含限制和偏移子句,是因为从项目中选择*将返回大约20000个结果。可能会重复Ah,无论如何,谢谢-我宁愿添加一些更进一步的业务逻辑,而不是使用常量:DGood:)用业务逻辑解决它确实更好这个答案看起来很奇怪,像淘气淘气淘气淘气淘气淘气淘气淘气淘气淘气淘气淘气淘气淘气淘气淘气淘气淘气淘气淘气淘气淘气淘气淘气淘气淘气淘气淘气淘气淘气淘气淘气淘气淘气淘气淘气淘气淘气淘气淘气淘气淘气!
$values = [
    ':limit' => $this->limit,
    ':offset' => $this->offset
];

const QUERY = "SELECT * FROM Project";
const LIMIT = " LIMIT :limit OFFSET :offset";

$query = QUERY;

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

// now do parameter substitution, 
// testing again if you need to add the limit params