我已经为此搜索过高低,我无法绕过它。我有一个表单来搜索Permit Applications。输入您的许可证号码,它针对3个单独的SQL Server视图运行3个查询。查询在同一个if语句中几乎完全相同,但最后一个查询失败。我已经执行了var_dump($query_insp_history)
复制输出并直接在SSMS中运行新查询,它运行正常。是否有其他错误检查可以提供除sqlsrv_fetch_array() expects parameter 1 to be resource, boolean given
以外的更多详细信息?我相信我的参数设置正确,如果结构不同,请告诉我。
// Application Inspection History Section
是给我问题的部分。我只是无法弄清楚出现它的设置与其他两个查询的设置方式相同。我在这行代码while($row = sqlsrv_fetch_array($sql_insp_history, SQLSRV_FETCH_ASSOC)){
var_dump($sql_insp_history);
返回
bool(false)
var_dump($query_insp_history);
返回
string(81) "SELECT * FROM my.dbo.vw_Permit_App_Insp_History WHERE (LTRIM(APNO) = '123456')"
再次,将其复制到SSMS中正确运行...
提前谢谢。
这是我的代码。
<div class="container content">
<form method="POST" name="permit_search" action="">
<input type="number" id="apno" name="apno" class="col-sm-8">
<input type="submit" name="apnosearch" id="apnosearch" value="Submit" class="col-sm-4">
</form>
<br/>
<?php
error_reporting(E_ALL ^ E_NOTICE);
$serverName = "my_server";
$connectionInfo = array( "Database"=>"myDb", "UID"=>"myUser", "PWD"=>"myPass", "ReturnDatesAsStrings" => true);
$conn = sqlsrv_connect( $serverName, $connectionInfo);
if($conn === false) {
echo "Could not connect.\n";
die( print_r( sqlsrv_errors(), true));
}
// Query variables
$searchapno = $_POST['apno'];
$where_permit_info = "WHERE (LTRIM(APNO) = '$searchapno')";
$where_review_history = "WHERE (LTRIM(APNO) = '$searchapno') ORDER BY ACTTYPE, TYPENO ASC";
$where_insp_history = "WHERE (LTRIM(APNO) = '$searchapno') ORDER BY INSPTYPE, TYPENO ASC";
$query_permit_info = "SELECT TOP 1 * FROM my.dbo.vw_Permit_Information $where_permit_info";
$query_review_history = "SELECT * FROM my.dbo.vw_Permit_Plan_Review_History $where_review_history";
$query_insp_history = "SELECT * FROM my.dbo.vw_Permit_App_Insp_History $where_insp_history";
// Overall Permit Information
if (isset($_POST['apno'])) {
$sql_permit_info = sqlsrv_query($conn, $query_permit_info);
while ($row= sqlsrv_fetch_array($sql_permit_info, SQLSRV_FETCH_ASSOC)) {
echo "<strong>Name:</strong> ".$row['APNAME']."<br>";
echo "<strong>Number:</strong> ".$row['APNO']."<br>";
echo "<strong>Address:</strong> ".$row['STNO']." ".$row['PREDIR']." ".$row['STNAME']." ".$row['SUFFIX']." ".$row['POSTDIR']."<br>";
echo "<strong>Description:</strong> ".$row['DESCRIPT']."<br>";
echo "<strong>Status:</strong> ".$row['STAT']."<br>";
echo "<h3>Application Stages</h3><br>";
echo "<strong>Date Processed:</strong> ".$row['ADDDTTM']."<br>";
echo "<strong>Date Issued:</strong> ".$row['ISSDTTM']."<br>";
}
sqlsrv_free_stmt( $sql_permit_info);
// Plan Review History Section
echo "<h3>Plan Review History</h3>";
echo "<div class='nimbus_table_minimal'>";
echo "<table cellspacing='0' cellpadding='0'>
<thead>
<tr>
<th>Description</th>
<th>Added</th>
<th>Status</th>
<th>Status Date</th>
<th>Dept</th>
</tr>";
$sql_review_history = sqlsrv_query($conn, $query_review_history);
while($row = sqlsrv_fetch_array($sql_review_history, SQLSRV_FETCH_ASSOC)){
echo "<tbody>";
echo "<tr>";
echo "<td>".$row['DESCRIPT']." ".$row['TYPENO']."</td>";
echo "<td>".$row['ADDDTTM']."</td>";
echo "<td>".$row['STAT']."</td>";
echo "<td>".$row['STATDTTM']."</td>";
echo "<td>".$row['DEPT']."</td>";
echo "</tr>";
}
sqlsrv_free_stmt( $sql_review_history);
echo "</tbody></table></div>";
// Application Inspection History Section
echo "<h3>Application Inspection History</h3>";
echo "<div class='nimbus_table_minimal'>";
echo "<table cellspacing='0' cellpadding='0'>
<thead>
<tr>
<th>Number and Inspection</th>
<th>Status</th>
<th>Inspector</th>
</tr>";
$sql_insp_history = sqlsrv_query($conn, $query_insp_history);
while($row = sqlsrv_fetch_array($sql_insp_history, SQLSRV_FETCH_ASSOC)){
echo "<tbody>";
echo "<tr>";
echo "<td>".$row['DESCRIPT']." ".$row['TYPENO']."</td>";
echo "<td>".$row['STAT']."</td>";
echo "<td>".$row['EMPLAST']."</td>";
echo "</tr>";
}
sqlsrv_free_stmt( $sql_insp_history);
echo "</tbody></table></div>";
}
?>
</div>
答案 0 :(得分:1)
According to its documentation, sqlsrv_query()在成功时收到错误或声明资源,则返回false
。
你必须养成检查SQL操作中的错误的习惯,否则你永远不会知道你停在哪附近,弗罗斯特先生。
你想要这样的东西:
$sql_permit_info = sqlsrv_query($conn, $query_permit_info);
if ($sql_permit_info === false) {
die( print_r( sqlsrv_errors(), true));
}
while ($row= sqlsrv_fetch_array($sql_permit_info, SQLSRV_FETCH_ASSOC)) {
答案 1 :(得分:0)
我正在使用的视图中的某些内容必须不正确。我将原始SELECT语句从视图中删除并插入到我的$sql_permint_info
中,现在一切正常。