连接到SQL Server数据库的php警告

时间:2018-12-11 15:05:07

标签: php sql-server

我已经建立了我的第一个PHP网站,并且正在与SQL数据库进行交互。该代码应该将记录插入表中。该代码确实完成了插入,但是引发了3条警告消息。我不知道如何删除邮件。我试图通过关闭错误报告来抑制php.ini中的警告,但是并没有停止警告。我读到,修复错误比抑制错误更好,但是我不知道该怎么做。

  

PHP警告:sqlsrv_query()期望参数1为资源,在第49行的C:\ inetpub \ wwwroot \ Parishes_prod \ administration \ add_location.php中给出布尔值

     

PHP警告:sqlsrv_free_stmt()期望参数1为资源,在第50行的C:\ inetpub \ wwwroot \ Parishes_prod \ administration \ add_location.php中给出布尔值

     

PHP警告:sqlsrv_close()期望参数1为资源,在第51行的C:\ inetpub \ wwwroot \ Parishes_prod \ administration \ add_location.php中给出布尔值

41.   $tsql = "insert into tbllocation (event_ID, Date, Location ) values(?,?,?)";  
42.   $dt = $_POST['date'];
43.   if ($dt == ""){
44.     $dt = null; 
45.   }
46.   $params = array($_POST['eventID'], $dt, $_POST['location']);  
47.   $serverName = "localhost";
48.   $connectionInfo = array( "Database"=>"database", "UID"=>"User", "PWD"=>"password" );
49.   $conn = sqlsrv_connect( $serverName, $connectionInfo);
50.   $stmt = sqlsrv_query($conn, $tsql, $params);  
51.   sqlsrv_free_stmt($stmt);  

2 个答案:

答案 0 :(得分:0)

尝试以下解决方案:

<?php
 //1. Connect:
$serverName = "localhost";
$connectionInfo = array( "Database"=>"database", "UID"=>"User", "PWD"=>"password" );
$conn = sqlsrv_connect( $serverName, $connectionInfo);
if( $conn === false ) {
 die( print_r( sqlsrv_errors(), true));
}
//Query
  $tsql = "insert into tbllocation (event_ID, Date, Location ) values(?,?,?)";  
  $dt = $_POST['date'];
     if ($dt == ""){
      $dt = null; 
     }
     $params = array($_POST['eventID'], $dt, $_POST['location']); 
    $stmt = sqlsrv_query($conn, $tsql, $params);
   if( $stmt === false ) {
   die( print_r( sqlsrv_errors(), true));
  }
   sqlsrv_free_stmt($stmt);

答案 1 :(得分:0)

我检查了数据库,记录肯定会插入到表中。我不确定为什么收到警告。我发现我可以告诉PHP仅使用以下代码报告错误:error_reporting(E_ERROR); 关闭了警告,一切都很好。我知道抑制警告不是很好,因为警告表明可能会导致错误的问题。

今天,我打算尝试解决此警告,但是在删除禁止警告代码后,警告消息没有出现。修复未损坏的内容毫无意义。对?

昨天,即使在开发服务器上查看站点的本地副本时,我也将代码调整为始终指向实时数据库服务器。这样,就无需在本地运行单独的数据库并尝试使2保持同步。也许更改连接设置会解决所有问题。我的新连接字符串为:

$serverName = "livedata";
$connectionInfo = array( "Database"=>"database", "UID"=>"User", "PWD"=>"password", "LoginTimeout"=>60 );
$conn = sqlsrv_connect( $serverName, $connectionInfo);

Livedata表示驻留在云中的生产VPS。我在DEV机器和prod机器上的hosts文件中设置了livedata。这是必需的,因为生产机器的IP是不同的,具体取决于我是否在公司网络上本地DEV PC上的VPS上。

我现在可以说我没有错误或警告,一切都很好。 :-)

我仍然希望我知道确切的原因是什么。

Edgard,我没有机会尝试您的代码,但感谢您发布它。我敢肯定,如果我还没有解决该错误,那将会有所帮助。