Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有没有办法在PHP PDO中使参数成为可选的?_Php_Mysql_Pdo - Fatal编程技术网

有没有办法在PHP PDO中使参数成为可选的?

有没有办法在PHP PDO中使参数成为可选的?,php,mysql,pdo,Php,Mysql,Pdo,假设我有这个问题: $qry = 'SELECT p.id FROM products p WHERE p.type = :type AND p.parent = :parent'; 如果我想让“type”成为可选的,那么我知道的唯一方法就是这样做: $qry = 'SELECT p.id FROM products p WHERE p.parent = :parent'; if(isset($type)) { $qry .= 'AND p.typ

假设我有这个问题:

$qry = 'SELECT p.id FROM products p 
        WHERE p.type = :type AND p.parent = :parent';
如果我想让“type”成为可选的,那么我知道的唯一方法就是这样做:

$qry = 'SELECT p.id FROM products p 
        WHERE p.parent = :parent';

if(isset($type))
{
    $qry .= 'AND p.type = :type';
}
这是最好的方式吗?我想知道是否有一种方法可以让它保持原样,并使用某种参数来表示它是可选的。。。例如,如果$type=“*”则拉取所有类型


执行此操作的最佳方法是什么?

您可能还需要检查空白值

if(isset($type) && $type != '') {
    $qry .= 'AND p.type = :type';
}

您可能还需要检查空白值

if(isset($type) && $type != '') {
    $qry .= 'AND p.type = :type';
}

理论上,这可能会起作用:

 AND :type IN (NULL, p.type)

我不确定速度有多快。但它会将您的查询逻辑完全放入数据库。

理论上,这可能会起作用:

 AND :type IN (NULL, p.type)

我不确定速度有多快。但是它会将您的查询逻辑完全放入数据库。

或者干脆
如果(!empty($type)){}
这取决于字段的有效值是否为空值?@choise I like!=''as empty()将0(int/string)和FALSE视为空,但它们可能是可接受的值。@nev stokes同意,但我也同意,如果您要查找的设置值不是空的。2 centor干脆
如果(!empty($type)){}
这取决于是否有空值,如果字段的有效值不存在?@choise I like!=''as empty()将0(int/string)和FALSE视为空,但它们可能是可接受的值。@nev stokes同意,但我也同意,如果您要查找的设置值不是空的。2美分