【问题标题】:Using special characters like parenthesis (),asterisk *.. in where condition在 where 条件下使用括号 ()、星号 *.. 等特殊字符
【发布时间】:2016-02-02 09:45:19
【问题描述】:

每当我尝试从数据库的一个表中获取值时。在我的查询中,我将(),*,-..etc 之类的特殊字符用于例如,

Select * from table_name where col_name='Emlysium(infra)'
or Select * from table_name where col_name='demo & intest'

如果我使用上述查询,则此查询对于获取正确的值没有用处,并且它们显示为空值,因为我使用了特殊字符。

**Demo Table**

id | col_name | col_name2

1  | Emlysium(infra) | abc

2  | demo & intest   | mno

3  | jerry.pat       | xyz

所以你能建议我一个解决方案,通过它我们可以使用特殊字符比较值。 例如。 Select * from table_name where col_name='Emlysium(infra)

********My code

$site = 'Emlysium(infra)';

function get($site)
{
        $this->db->select('*');
        $this->db->where(array('running.site'=>$site));                             
        $query = $this->db->get('running');
        return $query->num_rows();
}

【问题讨论】:

  • 请您添加有问题的数据库表内容吗? @Aurea

标签: php mysql codeigniter


【解决方案1】:

您只需使用活动记录编写查询。它会自动处理所有转义字符

$val = "Emlysium(infra)";
$this->db->select('subcat_id');
$this->db->where('col_name', $val);
$query = $this->db->get('table_name');

【讨论】:

    【解决方案2】:

    只需转义每个特殊字符:

    Select * from table_name where col_name='Emlysium\(infra\)'
    

    获取table test where text = '*()asdf'的行

    SELECT * FROM test WHERE text = '\*\\\(\)asdf'
    

    如果你在php中传递参数:

    $qry = "SELECT * FROM test WHERE text = '" . addcslashes('*().;', '*()') . "'";
    

    addcslashes (php.net):返回一个在 charlist 参数中列出的字符之前带有反斜杠的字符串。

    【讨论】:

    • 如果我作为参数传递并放入 where 条件怎么办??
    • 只使用 addcslashes($sql, '*()');
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-08
    • 2017-01-30
    • 2015-06-03
    • 1970-01-01
    • 2015-02-10
    • 1970-01-01
    相关资源
    最近更新 更多