编码转义值错误


codeigniter escape value error

我使用codeigiter 2.1.3,我有简单的查询绑定,但是当我运行这个时,我得到以下错误。我甚至使用相同的东西与活动记录,但我仍然得到相同的错误。使用ODBC连接从MsSql查询数据

$searchTerm = $this->db->escape_like_str("st'm");
$sql = "SELECT * FROM arcus WHERE id LIKE ? OR name = ?";
$query = $this->db->query($sql, array($searchTerm, $searchTerm));
Error Number: 37000
[Microsoft][ODBC SQL Server Driver][SQL Server]Incorrect syntax near 'm'.
SELECT * FROM arcus WHERE id LIKE '%st''m%' {escape '!'}
OR name LIKE '%st''m%' {escape '!'}
Filename: C:'xampp'htdocs'XX'system'database'DB_driver.php
Line Number: 330

问题解决了,代码编写器没有按照msql的要求转义值。就像MsSql的单引号是转义的('st' m'),而mysql ('st' m')。Codeigniter的做法是错误的。这个帖子链接帮助我使用下面的函数来转义MsSql的引号。它现在起作用了。谢谢你的建议。

 function ms_escape_string($data) {
    if ( !isset($data) or empty($data) ) return '';
    if ( is_numeric($data) ) return $data;
    $non_displayables = array(
        '/%0[0-8bcef]/',            // url encoded 00-08, 11, 12, 14, 15
        '/%1[0-9a-f]/',             // url encoded 16-31
        '/['x00-'x08]/',            // 00-08
        '/'x0b/',                   // 11
        '/'x0c/',                   // 12
        '/['x0e-'x1f]/'             // 14-31
    );
    foreach ( $non_displayables as $regex )
        $data = preg_replace( $regex, '', $data );
    $data = str_replace("'", "''", $data );
    return $data;
}