我正在尝试使用php在SQL Server中显示行

时间:2018-09-07 20:12:00

标签: php sql-server sql-server-2012 sqlsrv

建立连接并运行查询后,我得到的响应是“ resource(4)类型(SQL Server连接)”

<?php    
$serverName = "xx.xx.xx.xx";   
$uid = "sa";     
$pwd = "xxxxxxxxxx";    
$databaseName = "courierdb";   

$connectionInfo = array( "UID"=>$uid,                              
                         "PWD"=>$pwd,                              
                         "Database"=>$databaseName);   

/* Connect using SQL Server Authentication. */  

$conn = sqlsrv_connect( $serverName, $connectionInfo);

var_dump($conn);


/* Execute the query. */    
$sql = "SELECT * FROM dbo.AwbDomestics";     
$stmt = sqlsrv_query( $conn, $sql);
if( $conn === false ) {
    die( print_r( sqlsrv_errors(), true));
}
while ($row = sqlsrv_fetch_array($stmt,SQLSRV_FETCH_ASSOC))
{
    if (sqlsrv_has_rows($stmt)) {

        echo "row:<br>"; var_dump($row); echo "<br><br>";

    }
    else {
        echo "<br/>No Results were found."; 
    }

}

sqlsrv_free_stmt( $stmt);  
sqlsrv_close( $conn); 
?>        

在没有这种类型的“ resource(4)(SQL Server连接)”的情况下,如何选择数据库中的所有行。非常感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

您可以尝试使用此脚本。不需要使用sqlsrv_has_rows()。使用sqlsrv_fetch_array()sqlsrv_fetch() / sqlsrv_get_field()检索数据。

<?php
/* Warnings */
sqlsrv_configure("WarningsReturnAsErrors", 1);

/* Connection */
$serverName = "xx.xx.xx.xx";   
$uid = "sa";     
$pwd = "xxxxxxxxxx";    
$databaseName = "courierdb";   
$connectionInfo = array(
    "UID" => $uid,                              
    "PWD" => $pwd,                              
    "Database" => $databaseName
);   
$conn = sqlsrv_connect(
    $serverName, 
    $connectionInfo
);
if ($conn === false) {
    die(print_r(sqlsrv_errors(), true));
}

/* Execute the query with sqlsrv_fetch_array(). */    
$sql = "SELECT * FROM dbo.AwbDomestics";     
$stmt = sqlsrv_query($conn, $sql);
if ($stmt === false) {
    die(print_r(sqlsrv_errors(), true));
}
while ($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) {
    //print_r($row, true);
    foreach($row as $field => $value) {
        echo $field.": ".$value." ";
    }
    echo "\n";  
}

/* Execute the query with sqlsrv_fetch()/sqlsrv_get_field(). */    
$sql = "SELECT * FROM dbo.AwbDomestics";     
$stmt = sqlsrv_query($conn, $sql);
if ($stmt === false) {
    die(print_r(sqlsrv_errors(), true));
}
$fc = sqlsrv_num_fields($stmt);
while (sqlsrv_fetch($stmt)) {
    for($i = 0; $i < $fc; $i++) {
        echo sqlsrv_get_field($stmt, $i, SQLSRV_PHPTYPE_STRING(SQLSRV_ENC_CHAR))." ";
    }
    echo "\n";
}

/* End */
sqlsrv_free_stmt($stmt);  
sqlsrv_close($conn); 
?>

答案 1 :(得分:0)

if (sqlsrv_has_rows($stmt))测试应该在循环周围,而不是在循环内部。

if (sqlsrv_has_rows($stmt)) {
    while ($row = sqlsrv_fetch_array($stmt,SQLSRV_FETCH_ASSOC))
    {
        echo "row:<br>"; var_dump($row); echo "<br><br>";
    }
    else {
        echo "<br/>No Results were found."; 
    }
}

要检查查询中的错误,应检查$stmtFALSE,而不是$conn。所以改变

if ($conn == false)

if (!$stmt)