2017-10-08 89 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'方法,無論如何,如果你要創建數據庫如果不存在你需要一個工作連接。 –