Я тоже сталкивался с этой проблемой.
Вы просто не можете использовать функцию PDO bindParam для запроса SHOW COLUMN
.
Я не знаю почему. Я искал документ и сеть в течение нескольких часов, и я не могу найти никакого объяснения.
Альтернативой является использование PDO :: getColumnMeta
Или запросить информационную схему
$field = 'some_db_field';
$field = '%' . $field . '%';
$query = $db->prepare(
" SELECT * "
. " FROM INFORMATION_SCHEMA.COLUMNS "
. " WHERE table_name = 'your_table' AND column_name LIKE :fieldName "
);
$query->bindParam(':fieldName', $field, PDO::PARAM_STR);
$query->execute();
return $output;
}
У этого преимущества есть преимущество перед SHOW COLUMN: у вас возвращается намного больше информации о столбцах. Пример:
| TABLE_CATALOG | TABLE_SCHEMA | TABLE_NAME | COLUMN_NAME | ORDINAL_POSITION | COLUMN_DEFAULT | IS_NULLABLE | DATA_TYPE | CHARACTER_MAXIMUM_LENGTH | CHARACTER_OCTET_LENGTH | NUMERIC_PRECISION | NUMERIC_SCALE | DATETIME_PRECISION | CHARACTER_SET_NAME | COLLATION_NAME | COLUMN_TYPE | COLUMN_KEY | EXTRA | PRIVILEGES | COLUMN_COMMENT |
|---------------|--------------|-------------|-------------|------------------|----------------|-------------|-----------|--------------------------|------------------------|-------------------|---------------|--------------------|--------------------|-----------------|-------------|------------|-------|---------------------------------|----------------|
| def | db_9_1e4841 | input_table | Agency_CODE | 1 | (null) | YES | varchar | 3 | 9 | (null) | (null) | (null) | utf8 | utf8_general_ci | varchar(3) | | | select,insert,update,references | |