Php DBAL参数不工作
您好,我正在使用PHPSilex和DBALQueryBuilder(无ORM)以及SQLite。它有点工作,所以我可以构建一个查询,它会吐出结果,但我一辈子都不能让设置参数工作(我总是得到空数组) 以下是有效的方法:Php DBAL参数不工作,php,sqlite,symfony,doctrine-orm,silex,Php,Sqlite,Symfony,Doctrine Orm,Silex,您好,我正在使用PHPSilex和DBALQueryBuilder(无ORM)以及SQLite。它有点工作,所以我可以构建一个查询,它会吐出结果,但我一辈子都不能让设置参数工作(我总是得到空数组) 以下是有效的方法: $qb->select('*') ->from('photos') ->where("country = '".$country."'") ->andWhere('status = 1'
$qb->select('*')
->from('photos')
->where("country = '".$country."'")
->andWhere('status = 1')
->orderBy($sort[0], $sort[1])
->setFirstResult($start)
->setMaxResults($limit)
出于显而易见的原因,我想用以下内容代替:
$qb->select('*')
->from('photos')
->where("country = ?") /// <--
->andWhere('status = 1')
->orderBy($sort[0], $sort[1])
->setFirstResult($start)
->setMaxResults($limit)
->setParameter(0, $country) /// <--
$qb->select('*'))
->来自(“照片”)
->其中(“国家=?”///andWhere('status=1'))
->orderBy($sort[0],$sort[1])
->setFirstResult($start)
->setMaxResults($limit)
->setParameter(0,$country)///选择('*'))
->来自(“照片”)
->其中(“country=:country”)///和其中(“status=1”)
->orderBy($sort[0],$sort[1])
->setFirstResult($start)
->setMaxResults($limit)
->setParameter(':country',$country)///db->createQueryBuilder();
$expr=$qb->expr();
$qb->选择(“*”)
->来自(“照片”)
->其中($qb->expr()->andX(
$qb->expr()->eq('country','1'),///expr()->eq('status',1)
))
->orderBy($sort[0],$sort[1])
->setFirstResult($start)
->setMaxResults($limit)
->setParameter(1,$country)//我无意中回到了我自己的问题,因为我很久以前就解决了这个问题,当然这是一件愚蠢的事情。问题不在于正确地构建查询,而在于正确地使用查询。以下是答案供将来参考
使用查询生成器,您不需要执行以下操作:
$this->db->fetchAll($qb->getSQL());
// you get query with unfilled placeholders
而是:
$qb->execute()->fetchAll();
感谢所有试图帮忙的人 我无意中又回到了我自己的问题上来,因为我很久以前就解决了这个问题,结果当然是一件愚蠢的事情。问题不在于正确地构建查询,而在于正确地使用查询。以下是答案供将来参考
使用查询生成器,您不需要执行以下操作:
$this->db->fetchAll($qb->getSQL());
// you get query with unfilled placeholders
而是:
$qb->execute()->fetchAll();
感谢所有试图帮忙的人 你能详细说明一下“似乎不起作用”,没有结果返回吗?没错。没有错误。只是空结果数组。第一种方法按预期返回行。只是显示的更改。您是否尝试过->setParameter('country',$country)
(不带冒号)否。那么我应该如何在where()方法中声明参数?带或不带冒号?->其中(“country=:country”)
和->setParameter('country',$country)
。能否详细说明“似乎不起作用”,没有返回结果?完全正确。没有错误。只是空结果数组。第一种方法按预期返回行。只是显示的更改。您是否尝试过->setParameter('country',$country)
(不带冒号)否。那么我应该如何在where()方法中声明参数?带或不带冒号?->其中(“country=:country”)
和->setParameter('country',$country)
。请将您自己的问题标记为正确。这正好说明了我周日下午的阴郁发展。请把你自己的问题标记为正确。它正好照亮了我周日下午郁闷的发展。