唉,還是自己對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了)
自作孽不可活
此博文系作者原創,轉載請注明來源~
