简体   繁体   English

通过 php 显示 sqlsrv 中的所有数据库

[英]Show all database in sqlsrv by php

I want to display all databases in microsoft sql srv for admin panel, but i have problem with get value.我想在管理面板的 microsoft sql srv 中显示所有数据库,但我在获取值时遇到问题。 I'm try with query:我正在尝试查询:

EXEC sp_databases

This query is executed successfully in sql srv, but when i'm try make this same by PHP, im not see value, no any errors or warnings, return null此查询在 sql srv 中成功执行,但是当我尝试通过 PHP 进行相同操作时,我看不到值,没有任何错误或警告,返回 null

My PHP Code:我的 PHP 代码:

    <?php
$serverName = $_POST['hostname'];
$uid = $_POST['username'];
$pwd = $_POST['password'];
$connectionInfo = array( "UID"=>$uid,                              
                         "PWD"=>$pwd); 
$connsrv = sqlsrv_connect( $serverName, $connectionInfo);   

if($connsrv == TRUE ){

    echo "connected";

    $tsql = "EXEC sp_databases";
    $stmt = sqlsrv_query( $connsrv, $tsql);      
    while( $row = sqlsrv_fetch_array($stmt)){
        echo $row['DATABASE_NAME'];
    }

}else{
    echo "no connect";
}

?>

I don't know why I not see any result - any suggestions?我不知道为什么我没有看到任何结果 - 有什么建议吗? :( :(

One possible explanation for this unexpected behaviour is that CREATE DATABASE or ALTER ANY DATABASE or VIEW ANY DEFINITION permissions are requied to run the sp_databases stored procedure (I can reproduce this with a server login, which has only public role).对这种意外行为的一种可能解释是,运行sp_databases存储过程需要CREATE DATABASEALTER ANY DATABASEVIEW ANY DEFINITION 权限(我可以使用仅具有public角色的服务器登录来重现此情况)。 Set the needed permissions for the connection user, or as another option, try to use the sys.databases system view.为连接用户设置所需的权限,或者作为另一个选项,尝试使用sys.databases系统视图。

<?php
// Connectuion
$serverName = $_POST['hostname'];
$uid = $_POST['username'];
$pwd = $_POST['password'];
$connectionInfo = array("UID" => $uid, "PWD" => $pwd); 
$connsrv = sqlsrv_connect($serverName, $connectionInfo);   
if ($connsrv === false){
    echo "Not connected";
    exit;
}

// sp_databases
echo "Connected. EXEC sp_databases: "."<br>";
$tsql = "EXEC sp_databases";
$stmt = sqlsrv_query( $connsrv, $tsql);      
if ($stmt === false) {
    echo "Error (sqlsrv_query): ".print_r(sqlsrv_errors(), true);
    exit;
}
while( $row = sqlsrv_fetch_array($stmt)){
    echo $row['DATABASE_NAME']."<br>";
}
sqlsrv_free_stmt($stmt);

// sys.databases
echo "Connected. SELECT * FROM sys.databases: "."<br>";
$tsql = "SELECT * FROM sys.databases";
$stmt = sqlsrv_query( $connsrv, $tsql);      
if ($stmt === false) {
    echo "Error (sqlsrv_query): ".print_r(sqlsrv_errors(), true);
    exit;
}
while( $row = sqlsrv_fetch_array($stmt)){
    echo $row['name']."<br>";
}
sqlsrv_free_stmt($stmt);

// End
sqlsrv_close($connsrv);
?>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM