【问题标题】:php warnings connecting to SQL server database连接到 SQL Server 数据库的 php 警告
【发布时间】:2018-12-11 15:05:07
【问题描述】:

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

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

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

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

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);  

【问题讨论】:

  • 您的行号似乎没有正确匹配,但我想说sqlsrv_connect() 失败了。 永远不要尝试忽略错误,始终修复它们
  • 代码完成插入?你确定吗?您是否通过事后查询数据库确认数据已插入?您的连接似乎失败了。
  • 您的 sqlsrv_connect() 失败 - 在此调用后执行 sqlsrv_errors() 并发布错误。谢谢。
  • 阅读Example 1 in the manual 并添加应该已经在您的代码中的错误检查代码。如果错误不明显,请向我们显示错误消息

标签: php sql-server


【解决方案1】:

试试这个解决方案:

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

【讨论】:

    【解决方案2】:

    我检查了数据库,记录肯定被插入到表中。我不确定为什么会收到警告。我发现我可以告诉 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,我没有机会尝试您的代码,但感谢您发布它。如果我还没有修复错误,我相信它会有所帮助。

    【讨论】:

      猜你喜欢
      • 2018-01-02
      • 1970-01-01
      • 2013-07-08
      • 2020-03-07
      • 1970-01-01
      相关资源
      最近更新 更多