逃脱反引号

来源:5-5 [PDO] 数据库操作类之主键查询

Vegeterian

2015-11-14 19:36

 有个地方有点问题,大约100行代码那块。那个$fields整个字符串里没找到反引号时,再处理加入反引号。但是有可能是他的sql中,关键词的字段没加反引号,而非关键词的加了反引号。这样的话,还是逃脱了走加反引号的方法哈哈。 好比$sql = 'select `hi`, status from table ';   这个$fields = '`hi`,status';这个status就没加反引号。。

写回答 关注

2回答

  • 轻逐微风
    2016-05-14 20:08:36
    public static function parseFilds($fields)
        {
            if(!is_array($fields))
            {
                $fields = explode(',',$fields);
            }else{
                $fieldsStr = "*";
            }
            array_walk($fields,array('PdoMysql','addSpecilChar'));
            $fieldsStr=implode(',',$fields);
            return $fieldsStr;
        }


    轻逐微风

    第6、7行多余了...

    2016-05-14 20:09:34

    共 1 条回复 >

  • 轻逐微风
    2016-05-14 19:56:27
    /**
         * sql条件格式化 abc->`abc`,tab.cloum->`tab`.`cloum`
         * @param [type] &$value [description]
         */
        public function addSpecilChar(&$value)
        {
            if($value === "*") return $value;
            preg_match('/^\`(.*)\`$/',$value,$preg);
            if(count($preg)>0){return $value;};
            preg_match('/(.*)\.$/',$value,$preg);
            if(count($preg)>0){return '`'.$value.'`';};
            preg_match('/^\.(.*)/',$value,$preg);
            if(count($preg)>0){return '`'.$value.'`';};
    
            $arr = explode('.',$value);
            $res = Array();
            foreach ($arr as $key => $v) {
                if($v=='') break;
                preg_match('/^\`(.*)\`$/', $v,$preg);
                if(count($preg)>0){
                    $res[] = $v;
                }else{
                    $res[] = '`'.$v.'`';
                }
            }
            $value = implode('.',$res);
            $res = null;
            $arr = null;
            $preg = null;
            return $value;
        }

    我把他的升级了一下

PDO—数据库抽象层

本教程主要通过实战演练深入剖析PDO以加深理解

30043 学习 · 396 问题

查看课程

相似问题