[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了)

自作孽不可活

此博文系作者原创,转载请注明来源~

posted @ 2019-06-06 23:30  落月成孤倚♪  阅读(1463)  评论(0编辑  收藏