gpt4 book ai didi

zend-framework - [zend][db] fetchAll 有多个变量

转载 作者:行者123 更新时间:2023-12-04 06:46:56 25 4
gpt4 key购买 nike

我正在尝试在具有 2 个变量的查询上使用 fetchAll。我无法弄清楚语法。
我只能用 1 个变量来管理:

$sql = "SELECT * FROM mytable WHERE field1 = ?";
$this->_db->fetchAll($sql,$value1); # that works

但是,当查询有多个变量时,我遇到了一些问题
$sql = "SELECT * FROM mytable WHERE field1 = ? AND field2 = ?";
$this->_db->fetchAll($sql,$value1,$value2); # doesn't work
$this->_db->fetchAll($sql,array("field1"=>$value1,"field2"=>$value2)); # doesn't work either

我要使用的原因是什么?而不是将变量直接放入查询中,我已经了解到使用 ?允许由 db 引擎对查询进行一般性编译并提高性能。

最佳答案

有两种类型的参数,命名参数和位置参数。你混合了这两种类型,这是行不通的。

命名参数按名称匹配占位符。名称以 : 开头象征。参数名称与您碰巧使用它们的列的名称不同。您在关联数组中提供参数值,使用参数名称(而不是列名称)作为数组键。例如:

$sql = "SELECT * FROM mytable WHERE field1 = :param1 AND field2 = :param2";
$this->_db->fetchAll($sql,array("param1"=>$value1,"param2"=>$value2));

位置参数使用 ?占位符的符号。您使用简单(非关联)数组提供参数值,并且数组中值的顺序必须与查询中参数占位符的顺序相匹配。例如:
$sql = "SELECT * FROM mytable WHERE field1 = ? AND field2 = ?";
$this->_db->fetchAll($sql,array($value1,$value2));

大多数品牌的 SQL 数据库本身只支持一种风格或另一种风格,但 PDO 试图同时支持这两种风格,必要时在准备查询之前重写 SQL。由于 Zend_Db 是在 PDO 之后建模的,所以 Zend_Db 也支持这两种参数样式。

关于zend-framework - [zend][db] fetchAll 有多个变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3202077/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com