我使用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;
}