从php codeigniter发出关于mssql 2008的单引号的问题

时间:2015-07-23 15:54:08

标签: php sql-server sql-server-2008 codeigniter

我正在插入数据库,其中我尝试转义的其中一列是用户可能键入的单引号。例如,it's, 我正在使用codeigniter框架并执行以下操作来转义我的列:

$test=$this->db->escape($test);

但是当我提交时,我收到了SQL-Server错误。例如,如果我输入it's,它会尝试执行此操作

INSERT INTO table (test) VALUES(''it''s'')

什么时候应该

INSERT INTO table (test) VALUES('it''s')

为什么要插入额外的单引号?

1 个答案:

答案 0 :(得分:0)

当您只应转义要插入的字符串时,您正在转义整个SQL语句。例如,假设您当前有以下代码。

COUNTER=1
LAST_COMMIT=`git log remotes/origin/devel --pretty=oneline --pretty=format:%s | head -${COUNTER}`
JIRA_ID=`echo $LAST_COMMIT | grep -o -P '[A-Z]{2,}-\d+' | xargs`

while [[ ! -z "$JIRA_ID" && $COUNTER -lt "5" ]]; do
        echo "This is the current  counter:  $COUNTER"
        echo "This is the last commit $LAST_COMMIT"
        COUNTER=$[COUNTER+1]
done
echo "this is the counter outside the loop $COUNTER"

您应将其更改为

$test = "INSERT INTO table (test) VALUES ('" . $value . "');";

修改

正如Liam指出的那样,由于您使用的是Codeigniter,您可能还需要考虑使用它们提供的查询绑定。有关详细信息,请参阅此网址:https://ellislab.com/codeigniter/user-guide/database/queries.html