我正在更新一个旧的内部库,以使用PHP的PDO扩展。在旧代码中,有一个函数,其中第一个参数是一行SQL,然后第二个参数是一个可选列,用作键。我需要保留相同的函数签名,这样我就不会破坏任何代码。
我想用PDO的
FETCH_UNIQUE
fetch模式,但它需要我解析传入的每一行SQL,并将键列添加到select的开头。我担心有一些我想不到的边缘案例会破坏通话。
在使用PDO::FETCH_UNIQUE时,PDO中是否有其他方法来指定要用作键的列,而不是直接将其添加到SQL调用中的列列表中?
编辑:
下面是一些示例代码和更多详细信息:
$db = new Database();
$query = "first_name, last_name, contacts_id from contacts where first_name='George'";
$uniqueKeyField = "contacts_id";
$contact = $db->getRows($query, $uniqueKeyField);
这将产生:
array (
[34] => array (
"first_name" => "George",
"last_name" => "Smith",
),
[452] => array (
"first_name" => "George",
"last_name" => "Johnson",
)
)
问题是,我不能总是保证unique keyField会像PDO要求的那样排在列表的第一位,因为之前我们的API并不要求它。
看完手册后,我想这是不可能的
PDO::FETCH_UNIQUE
我们要么使用
PDO::FETCH_ASSOC
然后像以前一样循环遍历结果,构建我们自己的数组,或者在现有代码中更改对上述函数的每次调用,以重新排列字段,使唯一的键字段位于第一位。我希望有人知道一种方法,可以将唯一的键域作为参数传递到某个地方,但我猜PDO面临着与我们相同的问题——他们必须在查询中的某个地方提取键域,并将其作为返回数组中的id,他们不想尝试解析它并将其添加到现有查询中,因此需要将其作为第一个字段。