我已经建立了我的第一个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);
答案 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,我没有机会尝试您的代码,但感谢您发布它。我敢肯定,如果我还没有解决该错误,那将会有所帮助。