[英]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 DATABASE
或ALTER ANY DATABASE
或VIEW 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.