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

自作孽不可活

此博文系作者原創,轉載請注明來源~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM