PDOStatement :: getColumnMeta возвращает исходное имя таблицы вместо имени представления - PullRequest
9 голосов
/ 01 апреля 2012

Я использую платформу CakePHP. При возврате результатов запроса платформа вызывает «экспериментальный» PDOStatement::getColumnMeta для «массивизации» данных, когда они возвращаются из базы данных. Однако в зависимости от запроса результаты могут быть неоднозначными.

Бывают случаи, когда массив данных возвращается, как и ожидалось, когда все столбцы связаны с именем представления. В других случаях данные возвращаются смешанными, когда некоторые данные располагаются в массиве, связанном с исходной таблицей, соответствующей представлению.

// correct
Array(
[MyInstall] => Array
    (
        [id] => a6d1342a-7b4d-11e1-8397-60195b7d6275
        [user_id] => dc038c9e-7b4b-11e1-8397-60195b7d6275
        [script_id] => 057de1e0-7b48-11e1-8397-60195b7d6275
        [path] => 
        [url] => 
        [created] => 2009-06-15 12:43:30
        [version] => 3.2.1
        [admin_url] => wp-admin
        [name] => WordPress
        [icon] => icon_WordPress.gif
   )
)

//incorrect
Array(
[MyInstall] => Array
    (
        [id] => c71a2368-7b4d-11e1-8397-60195b7d6275
        [user_id] => dc038c9e-7b4b-11e1-8397-60195b7d6275
        [path] => 
        [url] => 
        [created] => 2011-11-07 22:26:38
        [version] => 3.2.1
        [admin_url] => wp-admin
  )

[Script] => Array
  (
        [script_id] => 057de1e0-7b48-11e1-8397-60195b7d6275
        [name] => WordPress
        [icon] => icon_WordPress.gif
  )
)

Способ построения результатов основан на результатах PDOStatment::getColumnMeta. Вот как выглядит пример результата getColumnMeta:

Array
(
    [native_type] => STRING
    [pdo_type] => 2
    [flags] => Array
        (
            [0] => not_null
        )

    [table] => MyInstall
    [name] => id
    [len] => 108
    [precision] => 0
)

Какие-либо предложения о том, как я могу получить эту же информацию, используя PDO для MySQL? Или есть другое решение этой проблемы?

Кстати: я уже подал ошибку с людьми из PHP на этом.

1 Ответ

2 голосов
/ 29 декабря 2012

Как выясняется, это известная в MySQL ошибка: http://bugs.mysql.com/bug.php?id=66794,, ожидающая обработки на момент написания.

...