2017-10-08 1 views
1

Je veux vérifier si la base de données « exemple » existe dans mon serveur MS SQL
Le code ne marche pas semblent fonctionner:/
Im obtenir,
sqlsrv_num_rows attend le paramètre 1 pour être en ressourcesPHP Vérifier si MS SQL Database existe?

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'); 

?> 
+0

double possible de [Avertissement: sqlsrv \ _num \ _rows() attend le paramètre 1 à être ressource, booléen donné] (https://stackoverflow.com/questions/35343796/warning-sqlsrv-num-rows-expects-parameter-1-to-be-resource-boolean-given) – jirigracik

Répondre

0

Vous avez plusieurs problèmes:

  • D'abord, vous n'êtes pas vérifier la valeur de retour de sqlsrv_query(), qui retourne FALSE si la requête échoue, et dans ce cas, vous passez FALSE-sqlsrv_num_rows(), qui semble être votre premier problème. Vous devez faire quelque chose comme ceci:

    $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 
    } 
    
  • Ensuite, vous utilisez le mauvais champ de INFORMATION_SCHEMA.SCHEMATA, dans SQL Server la base de données est CATALOG mais vous vérifiez SCHEMA_NAME qui est, bien, le schéma, étant la valeur par défaut schéma de SQL Server dbo.

  • Enfin, vous essayez de vérifier si une base de données existe tente de se connecter en premier lieu à cette base de données, donc si la base de données n'existe pas la connexion tombe en panne, et puisque vous ne vérifiez pas le résultat de sqlsrv_connect() c'est probablement la cause de l'échec sqlsrv_query() plus tard. Vous devez vous connecter à une base de données qui existe toujours, et non à la base de données que vous voulez vérifier:

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

Donc, fondamentalement, si la tentative de connexion à la base de données échoue, la base de données n'existe pas. S'il se connecte existe. Connaissez-vous les codes d'erreur que sql retournera si la base de données n'existe pas. S'il y a un problème avec ma connexion (erreurs du serveur), la même erreur apparaîtra –

+0

Vous pouvez effectuer une détection en fonction de l'échec de la connexion, et [il existe des codes d'erreur spécifiques pour cela] (https://docs.microsoft.com/ en-us/sql/odbc/reference/appendixes/appendix-a-odbc-error-codes), mais je pense qu'il vaut mieux utiliser l'approche 'INFORMATION_SCHEMA', de toute façon si vous allez créer la base de données si elle n'existe pas besoin d'une connexion de travail. –