Php 原则2 DBAL和QueryBuilder-它真的有效吗?
我以原则DBAL在线文档为例:Php 原则2 DBAL和QueryBuilder-它真的有效吗?,php,doctrine-orm,Php,Doctrine Orm,我以原则DBAL在线文档为例: $queryBuilder ->select('id', 'name') ->from('users') ->where('email = ?') ->setParameter(0, $userInputEmail); 第一个问题: 当我打电话给 $sql = $queryBuilder->getSQL(); 我希望返回一个完整有效的SQL查询,其中包含指定的参数;不幸的是,情况并非如此,我返回的查
$queryBuilder
->select('id', 'name')
->from('users')
->where('email = ?')
->setParameter(0, $userInputEmail);
第一个问题:
当我打电话给
$sql = $queryBuilder->getSQL();
我希望返回一个完整有效的SQL查询,其中包含指定的参数;不幸的是,情况并非如此,我返回的查询仍然带有问号;这正常吗
第二个问题:
我不清楚(阅读文档)如何准确地使用查询生成器来检索结果;一个实际的例子可以为我指明正确的方向
我在以下方面也遇到了类似的问题:
$DBQB
->insert('core_users')
->values(
array(
'username' => $SETUP['admin']['username'],
'secret' => hash($SETUP['util']['hashalgo'], $SETUP['admin']['passwd'])
)
);
其中->GetSQL()不会返回有效的SQL查询:
INSERT INTO core_users (username, secret) VALUES(qsecofr, b7...);
很明显,这让我犯了一个错误
谢谢你的回答
注意:这是一个非常类似的问题,但前者没有得到答案…完全正常。准备好的语句的本质是将sql独立于实际值发送到数据库服务器。两者总是分开,并在数据库级别合并;因此,Doctrine中的
getSQL
无法返回完全编译的SQL查询
文档中没有执行查询的实际示例,这有点奇怪
就我个人而言,我不太喜欢QueryBuilder::setParameter。相反,我会:
$queryBuilder = $conn->createQueryBuilder();
$queryBuilder
->select('id', 'name')
->from('users')
->where('email = ?');
$stmt = $conn->executeQuery($queryBuilder->getSQL(),[$userInputEmail]);
$user = $stmt->fetch();
只需要发送一个与参数顺序匹配的值数组。作为奖励,您可以为(?)中的xxx发送一个数组。事先准备好的陈述通常无法处理的事情
就插入内容而言,我认为你可能想得太多了。连接对象支持插入、更新和删除,而无需查询生成器
$conn->insert('core_users',['username'=>'DTrump','secret='Putin']);
=================================
下面是一个使用setParameter的工作示例
$qb
->select('projectId','gameNumber','fieldName')
->from('games')
->where('gameNumber = ?')
->setParameter(0,11457);
$stmt = $qb->execute();
dump($stmt->fetchAll());
谢谢你的回答;它解决了我的问题,尽管我仍然不明白为什么setParameter方法不起作用……它确实起作用,只是不是你认为它应该起作用的方式$qb->execute应该可以很好地运行查询。那么,你能举出一个完整的例子吗?只是为了抓住全貌。