[Microsoft][ODBC Driver 11 for SQL Server][SQL Server]列名 'user1' 无效
唉,还是自己对php执行sql语句运用不熟练。。。。
我的错误代码是这样的,(解决办法在最后)
$re=sqlsrv_query($conn, "select * from visitor where username = ".$name); $row = sqlsrv_fetch_array($re); if (is_null($re) || !$re) { print_r(sqlsrv_errors()); }
一开始只有前两行,然后报错,通过 sqlsrv_errors() 输出错误原因,进行排查,因为此函数结果为array,所以用 print_r() 输出,然后显示()
[0] => Array ( [0] => 42S22 [SQLSTATE] => 42S22 [1] => 207 [code] => 207 [2] => [Microsoft][ODBC Driver 11 for SQL Server][SQL Server]列名 'user1' 无效。 [message] => [Microsoft][ODBC Driver 11 for SQL Server][SQL Server]列名 'user1' 无效。 )
注意,$name的值为$_SESSION['name']="user1",是个字符串类型吧
然后,我的user1明明是变量,为什么报错是列名呢,我的表里当然没有叫“user1”的列。
然后,差点被百度的结果蒙蔽了双眼。。。终于看到一个人说写一个不加where的查询语句看看
然后,没问题,嗯, $sql = "select * from visitor where username = 'user1'";
这样也没错,所以,,,,难道是少了user1的两边的单引号?
所以 $sql = "select * from visitor where username = '".$name."'";
终于不报错了!!!
为什么是这样呢,一开始我就是以为$name是字符串,然后sql语句的条件where *** = 字符串,没啥问题,
写着写着博客才明白了(写这篇文章之初我还不知道为啥。。)
$sql = " XXXXXXXXXX ".$name 相当于$sql = "XXXXXX user1",这个user1跟sql语句融为一体,不分你我。。。所以这个变量还是需要用单引号括起来区分一下的
$sql="select * from visitor where username = '".$name."'";//注意单引号把变量括起来
$re=sqlsrv_query($conn, $sql);
好了问题解决,数据库大作业真烦人,,而且,我当初为啥给自己定的方向是php+sql server.................(主要后悔用sql server了)
自作孽不可活
此博文系作者原创,转载请注明来源~