PHP不显示SQL查询结果,但没有错误代码来突出原因

svmlkihl  于 2023-03-16  发布在  PHP
关注(0)|答案(1)|浏览(139)

我尝试使用PHP从Microsoft SQL数据库获取数据,PHP基于运行Apache2的Raspberry PI,数据库位于单独的服务器上。从Raspberry PI,我可以连接到服务器,但当我尝试使用PHP获取数据并显示为网页时,我什么也没得到,也没有错误
用于设置的SQL代码(应随附现有表格的图像):

sql set up
CREATE TABLE [dbo].[statuslabel](
    [id] [int] IDENTITY(1,1) NOT NULL,
    [status_label_value] [varchar](50) NOT NULL,
PRIMARY KEY CLUSTERED

PHP代码:

<!DOCTYPE html>
<html land="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE-edge">
    <meta name="viewport" content="width-device-width, initial-scale=1.0">
    <title>Test SQL page</title>
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css">
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/js/bootstrap.bundle.min.js"></script>
</head>

<body>
<h1>Test page, SQL connection</h1>
<br>

<?php
/*set up connection*/
$serverName = "ipaddress:port number"; //serverName\instanceName, portNumber (1433 by default)
$connectionInfo = array( "Database"=>"databasename", "UID"=>"username", "PWD"=>"password");
$conn = sqlsrv_connect( $serverName, $connectionInfo) or die("Unable to Connect to database");

if ($conn === false){  
    echo "Could not connect.\n";  
    die( print_r( sqlsrv_errors(), true));  
}  

/* Set up and execute the query. */ 
$tsql = "SELECT [id],[status_label_value] FROM [dbo].[statuslabel]";
$stmt = sqlsrv_query($conn, $tsql) or die("SQL query error");

if( $stmt === false){
    echo "Error in query preparation/execution.\n";  
    die( print_r( sqlsrv_errors(), true));
}

while($obj = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)){
    echo $obf['status_label_value'].'</br>';
}
 
sqlsrv_free_stmt( $stmt);  
sqlsrv_close( $conn); 
?>

</body>
</html>

我看过这个网站上的各种例子,并尝试了我理解的答案,可以适应,但没有成功。我也尝试了mysqli代码以及sqlsrv,似乎都返回空白表。连接到服务器测试OK基于IP地址和端口号,我试图添加错误代码,但没有指向我在正确的方向。如果我尝试连接到Raspberry PI本地托管的MariaDB,我可以获取数据,因此我想知道:
1.我无法从其他SQL Server或
1.运行Apache和PHP的树莓PI操作系统无法从Mircosoft服务器获取数据。
我试过将Mircosoft驱动程序添加到Pi中,但我得到了MsodbCsql18不可用(MsodbCsql17也是如此)和Unixodbc,但仍然没有运气。

hgqdbh6s

hgqdbh6s1#

我认为问题可能出在用于显示数据的while循环上。在循环中,您打印了$obf变量

while($obj = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)){
    echo $obf['status_label_value'].'</br>';
}

但你把变量叫做$obj
您可以尝试使用以下代码:

while($obj = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)){
    echo $obj['status_label_value'].'</br>';
}

你也可以尝试把这三行代码放在你的php脚本的顶部(在php标签中)来强制php报告所有的错误:

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

相关问题