sqlsrv_fetch_array()期望参数1是资源,布尔值



我已经为此搜索了高和低的搜索,我无法将其缠绕在它上。我有搜索许可申请的表格。输入您的许可证号,并针对3个单独的SQL Server视图运行3个查询。在同一语句中,查询几乎是相同的,但最后一个失败。我已经执行了var_dump($query_insp_history)复制了输出,并直接在SSM中运行新的查询,并且效果很好。除了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>

根据其文档,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)) {

我使用的视图必须不正确。我从视图中拉出了原始的选择语句,然后插入我的$sql_permint_info,现在一切正常。

最新更新