大家好。为什么这样写的sql语句不行呢?我是用asp.net连接mysql的,mysql在空间服务器上的。
string sql = string.Format("select count(1) from userInfo where name='{0}'", userName);为什么name='{0}'不能加引用?只能这样写name={0},这样写不报错,但得到的结果就不正确了,一加单引号就报错了。
报这样的错!!!
--------------------编程问答-------------------- string sql = string.Format("select count(1) from userInfo where name={0}", "'"+userName+"'"); --------------------编程问答--------------------
谢谢你,但是这样写,还是报和上面一样的错。
--------------------编程问答-------------------- --------------------编程问答-------------------- 这个userName里面是什么内容 --------------------编程问答-------------------- js代码里传过来的。
--------------------编程问答--------------------
--------------------编程问答-------------------- 改成固定的值先试一下,比如"张三"。查出结果在替换,注意转义 --------------------编程问答-------------------- 加个断点,取出已替换好的sql语句,放数据库上运行此sql语句 --------------------编程问答-------------------- name='{0}'改为name={0} --------------------编程问答-------------------- 1、先如7楼所说,测试一下固定值,如果这样没错,说明有可能之前你传进来的值有问题,没转义或者存在单引号之类的问题。
2、如8楼所说,打好断点,找到传入得sql语句,这个语句看一下应该就会知道问题出在哪了。
3、为什么不干脆试试:
string sql = "select count(1) from userInfo where name='" + userName.Replace("'","''") + "'";
4、我觉得吧,你的userName里面肯定有单引号,而且可能有两个,才出现了这个问题...注意看传进去了什么值 --------------------编程问答-------------------- string sql = string.Format("select count(1) from userInfo where name='{0}'", userName);
SqlParameter sp = new SqlParameter("?NickName", SqlDbType.VarChar, 50);
sp.Value = strNickName;
return SqlHelper.ExecuteDataRow(transaction, CommandType.Text, "SELECT * "
+ "FROM A WHERE Name=?NickName;", sp);
这样写就行了,你那么写可以被SQL注入 --------------------编程问答-------------------- 为什么要拼接sql语句呢?这样效率不高,也容易被注入,sqlserver使用@,mysql使用?,oracle使用: 使用参数替换,安全呐。
补充:.NET技术 , ASP.NET