php - 勾选列名中的转义连字符会生成 "unknown column in ' 字段列表'"

标签 php mysql

我有一段代码看起来像这样:

    // get media table columns 
    $media_columns = $this->many( "SHOW COLUMNS FROM media;" ); 
    $media_fields = array(); // array to filter out unnecessary col data  
    $pk_name = 'ignore_this'; 
    foreach( $media_columns as $col ) { 
        $field = $col['Field']; 
        if( $field !== $pk_name ) { 
            array_push($media_fields, '`'.$field.'`'); 
        } 
    } 
    $fields_str = "(".implode(",", $media_fields).")"; // put in string 
    // we will be overriding the campaign_uid with parent_uid 
    $insert_str = str_replace("`campaign_uid`", "'$parent_uid'", implode(',', $media_fields) ); 

    // duplicate draft media, pointing to parent campaign 
    $this->none( 
        "INSERT INTO media ". 
        "$fields_str ". 
        "SELECT $insert_str ". 
        "FROM media WHERE `campaign_uid`='$campaign_uid' " 
    );

抛出错误:

exception 'Exception' with message 'ADO Error: Unknown column 'margin-left' in 'field list' { INSERT INTO media (`ignore_this`,`nonprofit_uid`,`campaign_uid`,`meta_id`,`image_name`,`url`,`type`,`subtype`,`mark`,`last_updated`,`deleted`,`margin-left`,`margin-top`) 
SELECT `ignore_this`,`nonprofit_uid`,'XXXXXX',`meta_id`,`image_name`,`url`,`type`,`subtype`,`mark`,`last_updated`,`deleted`,`margin-left`,`margin-top` FROM media 
WHERE `campaign_uid`='XXXXXXXXXXX }'

在询问时髦的 sql 包装器函数之前:不要。我从我的前任那里继承了一堆乱七八糟的代码库,并且基本上无法使用他的功能。

出于同样的原因,我们在 mysql 列名中有连字符。因为 margin-left 失败了,我怀疑这就是问题所在,但是到处都有对该列名称的足够硬编码引用,重构并不是一个非常有吸引力的选择。

有趣的是,我直接从 SHOW COLUMNS 调用中提取字段名称,并用标记转义它们。我不明白如果一秒钟前刚从数据库中读取该列怎么找不到。

感谢任何帮助。

最佳答案

不要使用显示列。这从来都不是真正为你如何使用它而设计的。请改用 information_schema 元数据库:

select COLUMN_NAME
from information_schema.COLUMNS
where (TABLE_SCHEMA='name of db') AND (TABLE_NAME = 'name of your table')

关于php - 勾选列名中的转义连字符会生成 "unknown column in ' 字段列表'",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16427265/

相关文章:

c# - 计算存储过程的结果

mysql - MySql中的百分号

PHP PDO bindParam 落在了 foreach 中

javascript - 链接未使用 ajax/jquery 从数据库加载数据

php - 在 SQL 和 PHP 中处理用户输入字符串的正确方法?

mysql - MYSQL中插入数据放在一条最近删除的记录之后

php - Laravel 迁移在表中分配 2 个主键

Php和mysql登录脚本

php - 如何在 PHP 中对数组和数据进行排序?

php - Symfony:一页上的多个表单