代码之家  ›  专栏  ›  技术社区  ›  dallin

在使用PDO::FETCH_unique时,是否有其他方法为PDO提供唯一的列键,而不是在SQL中?

  •  0
  • dallin  · 技术社区  · 6 年前

    我正在更新一个旧的内部库,以使用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,他们不想尝试解析它并将其添加到现有查询中,因此需要将其作为第一个字段。

    0 回复  |  直到 6 年前