2017-10-08 87 views
1

我要检查数据库“示例”在我的MS SQL Server中存在
似乎没有工作代码:/
即时得到,
sqlsrv_num_rows预计参数1是资源PHP检查MS SQL数据库是否存在?

配置.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'); 

?> 
+0

[警告可能重复:SQLSRV \ _num \ _rows()预计参数1是资源,布尔给定](https://stackoverflow.com/questions/35343796/warning-sqlsrv-num-rows-expects-parameter-1-to-be-resource-boolean-given) – jirigracik

回答

0

你有几个问题:

  • 首先,你是不是检查sqlsrv_query()的返回值,如果查询失败,返回FALSE,在这种情况下,你传递给FALSEsqlsrv_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 Server数据库CATALOG,但要检查SCHEMA_NAME这是很好的模式,是默认SQL Server的架构dbo

  • 最后,您要检查是否有数据库存在试图在首位连接到数据库,所以如果数据库中不存在的连接失败,因为你没有检查的结果sqlsrv_connect()这可能是后来失败sqlsrv_query()的原因。你必须连接到始终存在,而不是要检查数据库的数据库:

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

所以基本上,如果连接尝试到数据库失败,数据库不存在。如果它连接它存在。你知道如果数据库不存在,sql将返回的错误代码。如果我的连接出现问题(服务器错误),它将返回相同的错误 –

+0

您可以根据失败的连接进行检测,并且[存在特定的错误代码](https://docs.microsoft.com/ en-us/sql/odbc/reference/appendixes/appendix-a-odbc-error-codes),但我认为最好使用'INFORMATION_SCHEMA'方法,无论如何,如果你要创建数据库如果不存在你需要一个工作连接。 –