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

时间:2018-02-13 20:08:48

标签: php sql-server wordpress sqlsrv

我已经为此搜索过高低,我无法绕过它。我有一个表单来搜索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>

2 个答案:

答案 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中,现在一切正常。