Список native_type PHP для PDO getColumnMeta ()

Я не хотел отключать уведомление, потому что это полезно, но хотел избежать слишком большого количества печатания.

Мое решение было этой функцией:

function ifexists($varname)
{
  return(isset($varname)?$varname:null);
}

Так что, если я хочу сослаться на $ name и echo, если существует, я просто пишу:

<?=ifexists('name')?>

Для массива элементы:

function ifexistsidx($var,$index)
{
  return(isset($var[$index])?$var[$index]:null);
}

На странице, если я хочу сослаться на $ _REQUEST ['name']:

<?=ifexistsidx(

Я не хотел отключать уведомление, потому что это полезно, но хотел избежать слишком большого количества печатания.

Мое решение было этой функцией:

[110]

Так что, если я хочу сослаться на $ name и echo, если существует, я просто пишу:

[111]

Для массива элементы:

[112]

На странице, если я хочу сослаться на $ _REQUEST ['name']:

[113]REQUEST,'name')?>
5
задан Xeoncross 18 July 2009 в 22:47
поделиться

5 ответов

Это одна из тех областей PDO, которые были намеренно оставлены неопределенными, чтобы уменьшить вес абстракции.

PDO не определяет стандартное представление типов для этого метода; у каждого водителя свое представление о том, что он может здесь вернуть.

3
ответ дан 14 December 2019 в 08:57
поделиться

I thought that I could share what I have so far. Since native_type and pdo_type return such drastically different values - I am using the "len" to try to test for strings vs text since everything less than 255 is a var char, int, or boolean. Also, pdo_type only has 5 possible values.

//PDO data types
$types = array(
    PDO::PARAM_BOOL => 'bool',
    PDO::PARAM_NULL => 'null',
    PDO::PARAM_INT  => 'int',
    PDO::PARAM_STR  => 'string',
    PDO::PARAM_LOB  => 'blob',
    PDO::PARAM_STMT => 'statement'  //Not used right now
);

//Get meta
$column = $result->getColumnMeta(1);

//If the column lenght isn't set - default to ZERO
$column['len'] = isset($column['len']) ? $column['len'] : 0;

//HACK: If it is longer than 255 chars then it is a text area
if($column['len'] > 255) {
    $column['type'] = 'text';
} else {
    $column['type'] = $types[$column['pdo_type']];
}
0
ответ дан 14 December 2019 в 08:57
поделиться

PDO - это , а не абстракция базы данных. Это «всего лишь» уровень унифицированного доступа. Если вы переключитесь на другую систему баз данных, вам, скорее всего, придется изменить код. Каждый (конкретный) драйвер базы данных возвращает свой собственный набор значений, и для драйвера нет «уровня перевода»: информация decl_type в pdo за пределами полей native_type / pdo_type в результате getColumnMeta ()

3
ответ дан 14 December 2019 в 08:57
поделиться

Я приложил руку к тому, чтобы изменить поведение, чтобы оно больше соответствовало документации. Вы можете обратиться к Ошибка PHP № 46508 .

1
ответ дан 14 December 2019 в 08:57
поделиться

Одно решение, с которым я столкнулся, требует, чтобы вы использовали имя таблицы как собственный псевдоним.

Вы можете вызвать getColumnMeta () и получить уникальный список таблиц, а для каждой таблицы выполнить оператор DESCRIBE {table}. Сопоставьте имя столбца с именами из вашего набора результатов, чтобы получить фактический тип данных MySQL.

В любом случае это сработало для меня и моих потребностей ...

0
ответ дан 14 December 2019 в 08:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: