从PHP

时间:2017-09-11 05:10:49

标签: php sql-server

我在使用PHP将数据放入MSSQL时出现问题 - 我收到此错误:

  

sqlsrv_query()要求参数1为资源,第13行的[path]中给出布尔值

我无法确定问题出在哪里,或者我是否有语法错误。

<?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

好的,现在我已经启用了错误消息,而且我现在已经有了这个消息:

  

数组([0] =&gt;数组([0] =&gt; 42000 [SQLSTATE] =&gt; 42000 [1] =&gt; 126 [代码] =&gt; 126 [2] =&gt; [微软] [用于SQL Server的ODBC驱动程序11] [SQL Server]无效的伪列&#34; $ t&#34;。[message] =&gt; [Microsoft] [用于SQL Server的ODBC驱动程序11] [SQL Server]无效的伪列&#34 ; $ t&#34;。))

但是,我不知道那可能是什么?是因为$ t是我不知道的SQL语法吗?简而言之,我正在从Arduino构建温度和湿度的日志设备,我需要它将值发布到数据库中(使用PHP) - PHP的语法如下所示:

  

test.php的T = 1&安培; H = 2

我现在做错了什么?在我的MySQL服务器私有测试时,一切正常&gt; _&lt;

- 编辑,找到解决方案! -

好的,我找到了解决方案,但我不确定是否有任何其他答案有直接修复。 MSSQL显然不接受&#34; NULL&#34;像MySQL一样。但这是有道理的。我编辑的最后一件事,所以我不确定以前的代码中是否有任何错误。但是,下面是最终(和工作)代码。 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));
?>

3 个答案:

答案 0 :(得分:0)

sqlsrv_connect()无法获得连接并返回FALSE。 你必须调试它。

  1. 检查数据库和用户名是否正确。
  2. 用户具有写入DATABASE的访问权限
  3. 您已安装PHP的MSSQL驱动程序。
  4. 希望这有帮助。

答案 1 :(得分: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));
    }
    ?>

希望这有帮助

答案 2 :(得分:0)

答案实际上非常简单,这是一个语法错误。 MSSQL不会接受插入的NULL,但是MySQL会这样做。 我对MSSQL并不熟悉,所以这就是为什么我没有看到错误。

因此,该行的正确语法是:

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

我只需要指定列(第一个表是ID,自动递增)并删除NULL。在MySQL中,NULL会跳过该列。