SHOW COLUMNS возвращает ошибку при использовании с подготовленным оператором и LIKE - PullRequest
0 голосов
/ 30 апреля 2018

У меня проблемы с запросом MySQL / MariaDB ниже, и я не могу понять, почему.

$field = 'some_db_field';
$field = '%' . $field . '%';

$query = $db->prepare(
    " SHOW COLUMNS "
  . "         FROM table"
  . "         LIKE :fieldName"
);

$query->bindParam(':fieldName', $field, PDO::PARAM_STR);
$query->execute();

Я получаю следующую ошибку:

Неустранимая ошибка: необработанное исключение «PDOException» с сообщением «SQLSTATE [42000]: синтаксическая ошибка или нарушение прав доступа: 1064 В синтаксисе SQL имеется ошибка; проверьте руководство, соответствующее вашей версии сервера MariaDB, чтобы найти правильный синтаксис для использования рядом с '?' в строке 1 'в script.php:

Что я делаю не так?

1 Ответ

0 голосов
/ 30 апреля 2018

Я тоже сталкивался с этой проблемой.

Вы просто не можете использовать функцию 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 |                |
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...