我在下面的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' with message' SQLSTATE [42000]:语法错误或访问冲突:1064 SQL语法中有错误;查看与您的MariaDB服务器版本相对应的手册,以便在'附近使用正确的语法?'在第1行'在script.php中:
我做错了什么?
答案 0 :(得分:2)
我也遇到过这个问题。
您根本无法在SHOW COLUMN
查询中使用PDO bindParam函数。
我不知道为什么。我已经搜索了文档和网络几个小时,我找不到任何解释。
另一种方法是使用PDO::getColumnMeta
或者查询information_schema
$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 | |