PHP 检查 MS SQL 数据库是否存在?

PHP Check if MS SQL Database exist?

我想检查我的 MS sql 服务器
中是否存在数据库 'example' 该代码似乎不起作用:/
我得到了,
sqlsrv_num_rows 期望参数 1 在资源中

config.php

<?php
$userID=$_SESSION['userID']; 
$serverName = ''; 
$uid = '';   
$pwd = '';   
$connectionInfo = array( "UID"=>$uid,                            
                         "PWD"=>$pwd,                            
                         "Database"=>$userID); 

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


?>

file.php

<?php

function checkForUserDB($userID){

    $_SESSION['userID'] = $userID;
    include('config.php');
    $sql="SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME ='".$userID."'";
    $result=sqlsrv_query($conn,$sql, array(), array( "Scrollable" => 'static' ));
    $count=sqlsrv_num_rows($result);
    if($count==1){

        echo "Database Exist!";
    }
    else{
        echo "Database does not exist!";

    }
}



checkForUserDB('example');

?>

你有几个问题:

  • 首先,您没有检查 sqlsrv_query() 的 return 值,如果查询失败,则 returns FALSE,并且在那如果您将 FALSE 传递给 sqlsrv_num_rows(),这似乎是您的第一个问题。你必须这样做:

    $result=sqlsrv_query($conn, $sql, array(), array( "Scrollable" => 'static' ));
    if ($result===false) {
      // only print SQL error while debugging, in production log the error to a file
      exit("Error executing query: ".sqlsrv_errors());
    }
    else {
      $count=sqlsrv_num_rows($result);
      // rest of your code
    }
    
  • 然后,您使用了 INFORMATION_SCHEMA.SCHEMATA 的错误字段,在 SQL 服务器中,数据库是 CATALOG 但您正在检查 SCHEMA_NAME嗯,架构,是 SQL 服务器 dbo.

  • 的默认架构
  • 最后,您正在尝试检查数据库是否存在尝试首先连接到该数据库,因此如果数据库不存在连接失败,并且由于您没有检查 sqlsrv_connect() 的结果,这可能是后来 sqlsrv_query() 失败的原因。您必须连接到一个始终存在的数据库,而不是您要检查的数据库:

    $connectionInfo = array( "UID"=>$uid,                            
                             "PWD"=>$pwd,                            
                             "Database"=>'YourMainDatabase'; // this database must exists