2017-09-11 129 views
0

MSSQL我把數據轉換成MSSQL與PHP有問題 - 我得到這個錯誤:問題與連接從PHP

sqlsrv_query() expects parameter 1 to be resource, boolean given in [path] on line 13

我實在看不出是哪裏的問題,或者如果我有一個語法錯誤。

<?php 
    $host = "127.0.0.1"; 
    $dbusername = "humid"; 
    $dbpassword = "humid"; 
    $db = "test"; 
    $t = $_GET['t']; 
    $h = $_GET['h']; 


    $connectionInfo = array("UID" => $dbusername, "PWD" => $dbpassword, "Database" => $db) or die("Couldnt connect to server"); 
    $dbconnect = sqlsrv_connect($host, $connectionInfo); 
    $sql = "INSERT INTO historic VALUES(NULL,$t,$h,CURRENT_TIMESTAMP)"; 
    sqlsrv_query($dbconnect, $sql); 
?> 

任何幫助將不勝感激!我不熟悉MSSQL,MySQL的只有


好了,現在我已經啓用的錯誤消息,並且我有現在這一個:

Array ([0] => Array ([0] => 42000 [SQLSTATE] => 42000 [1] => 126 [code] => 126 [2] => [Microsoft][ODBC Driver 11 for SQL Server][SQL Server]Invalid pseudocolumn "$t". [message] => [Microsoft][ODBC Driver 11 for SQL Server][SQL Server]Invalid pseudocolumn "$t".))

但是,我不知道是什麼那可能是?是否因爲$ t是我不知道的SQL語法?長話短說,我建立從一個Arduino一個臨時和潮溼的記錄設備,我需要它的值張貼到數據庫中(使用PHP) - 語法的PHP是這樣的:

test.php?t=1&h=2

我現在做錯了什麼?當在我的MySQL服務器上進行私人測試時,它一切正常> _ <

- 編輯,找到解決方案! -

好的,我找到了解決方案,但我不確定其他答案是否有直接修復。 MSSQL顯然不像MySQL那樣接受「NULL」。但是那是因爲。我編輯的最後一件事,所以我不確定在之前的代碼中是否有任何錯誤。 Hoever,下面是最終(和工作)的代碼。 Arduino的帖子和一切。找到了!

<?php 
    $host = "WDKTO560\TEST"; 
    $dbusername = "humid"; 
    $dbpassword = "humid"; 
    $db = "test"; 
    $t = $_GET['t']; 
    $h = $_GET['h']; 



    $connectionInfo = array("UID" => $dbusername, "PWD" => $dbpassword, "Database" => $db) or die("Couldnt connect to server"); 
    $dbconnect = sqlsrv_connect($host, $connectionInfo); 
    $sql = "INSERT INTO historic (temperature, humidity, date) VALUES($t,$h,CURRENT_TIMESTAMP)"; 
    sqlsrv_query($dbconnect, $sql) or die(print_r(sqlsrv_errors(), true)); 
?> 
+0

可能的重複[參考 - 這個錯誤在PHP中意味着什麼?](https://stackoverflow.com/questions/12769982/reference-what-does-this-error-mean-in-php) – miken32

回答

0

答案其實很簡單,它是一個語法錯誤。 MSSQL不會接受NULL插入,但MySQL會。 我不熟悉MSSQL,所以這就是爲什麼我沒有看到錯誤。

因此,該行的正確語法是:

$sql = "INSERT INTO historic (temperature, humidity, date) VALUES($t,$h,CURRENT_TIMESTAMP)"; 

我只是必須指定列(表頭爲ID,自動遞增),並取出空。在MySQL中,NULL將跳過該列。

0

sqlsrv_connect()無法獲得連接並返回FALSE。 你將不得不調試它。

  1. 檢查數據庫和用戶名是否正確。
  2. 用戶有權寫入數據庫
  3. 您已安裝PHP的MSSQL驅動程序。

希望這會有所幫助。

+0

Just double選中 - 似乎用戶是正確的,並且設置了所有權限。我會嘗試在測試中使用ODBC。 –

0

使用Windows身份驗證進行連接。

<?php 
    $serverName = "serverName\sqlexpress"; //serverName,instanceName 


    $ConInfo = array("Database"=>"dbName"); 
    $conn = sqlsrv_connect($serverName, $ConInfo); 

    if($conn) { 
     echo "Connection established.<br />"; 
    }else{ 
     echo "Connection could not be established.<br />"; 
     die(print_r(sqlsrv_errors(), true)); 
    } 
    ?> 

按用戶名和密碼連接。

<?php 
    $serverName = "serverName\sqlexpress"; 
    $ConInfo = array("Database"=>"dbName", "UserId"=>"userName", "PWD"=>"password"); 
    $conn = sqlsrv_connect($serverName, $ConInfo); 

    if($conn) { 
     echo "Connection established.<br />"; 
    }else{ 
     echo "Connection could not be established.<br />"; 
     die(print_r(sqlsrv_errors(), true)); 
    } 
    ?> 

希望這有助於

+0

使用用戶名和密碼:連接無法建立。Array([0] => Array([0] => IMSSP [SQLSTATE] => IMSSP [1] => -1 [code] => -1 [2] =>無效選項UserId傳遞給sqlsrv_connect [消息] =>無效的選項UserId傳遞給sqlsrv_connect。)) –

+0

它與Windows身份驗證正常工作。儘管...> _ < –