Есть ли другой способ предоставить PDO уникальный ключ столбца при использовании PDO :: FETCH_UNIQUE, чем в SQL? - PullRequest
0 голосов
/ 16 декабря 2018

Я обновляю старую внутреннюю библиотеку, чтобы использовать расширение PDO PHP.В старом коде есть функция, в которой первый параметр - это строка SQL, а затем второй параметр - необязательный столбец, используемый в качестве ключа.Мне нужно сохранить эту же сигнатуру функции, чтобы не нарушать код.

Я бы хотел использовать режим извлечения PDO FETCH_UNIQUE, но для этого потребовался бы анализ каждой передаваемой строки SQLи добавьте ключевой столбец в начало выбора.Я обеспокоен тем, что существуют крайние случаи, о которых я бы не подумал, что это может прервать вызов.

Есть ли другой способ в PDO указать, какой столбец использовать в качестве ключа при использовании PDO :: FETCH_UNIQUE otherчем добавить его непосредственно в список столбцов в вызове 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",
    )
)

Проблема в том, что я не всегда могу гарантировать, что уникальный keyField будет первым в списке, как того требует PDO, потому что это раньше не требовалось нашим API.

После прочтения руководства, я думаю, что это невозможно сделать с PDO::FETCH_UNIQUE, и нам придется либо использовать PDO::FETCH_ASSOC и циклически перебирать результаты, как мы привыкли, и создавать наш собственный массив, либо изменять каждый вызов навышеуказанная функция в существующем коде переставляет поля так, чтобы уникальное ключевое поле было первым.Я надеялся, что кто-то знает, как можно просто передать уникальное ключевое поле в качестве аргумента где-то, но я предполагаю, что PDO сталкивается с той же проблемой, что и мы: им нужно иметь ключевое поле в запросе где-то, чтобы вытащить его и указать в качестве идентификатора.в возвращаемом массиве, и им не нужно пытаться анализировать и добавлять его к существующим запросам, поэтому необходимо иметь его в качестве первого поля.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...