duanrang2627 2017-10-08 18:55
浏览 25
已采纳

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

I want to check if the database 'example' exist in my ms sql server
The code doesnt seem to work :/
Im getting,
sqlsrv_num_rows expects parameter 1 to be in resource

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

?>
  • 写回答

1条回答 默认 最新

  • dongshubang7816 2017-10-08 21:43
    关注

    You have several problems:

    • First, you are not checking the return value of sqlsrv_query(), which returns FALSE if the query fails, and in that case you're passing FALSE to sqlsrv_num_rows(), which seems to be your first problem. You have to do something like this:

      $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
      }
      
    • Then, you are using the wrong field of INFORMATION_SCHEMA.SCHEMATA, in SQL Server the database is CATALOG but you are checking SCHEMA_NAME which is, well, the schema, being the default schema of SQL Server dbo.

    • Finally, you are trying to check if a database exists trying to connect in first place to that database, so if the database doesn't exists the connection fails, and since you aren't checking the result of sqlsrv_connect() this is probably the cause of the failed sqlsrv_query() later. You have to connect to a database that always exists, not to the database that you want to check:

      $connectionInfo = array( "UID"=>$uid,                            
                               "PWD"=>$pwd,                            
                               "Database"=>'YourMainDatabase'; // this database must exists 
      
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 使用phpstudy在云服务器上搭建个人网站
  • ¥15 应该如何判断含间隙的曲柄摇杆机构,轴与轴承是否发生了碰撞?
  • ¥15 vue3+express部署到nginx
  • ¥20 搭建pt1000三线制高精度测温电路
  • ¥15 使用Jdk8自带的算法,和Jdk11自带的加密结果会一样吗,不一样的话有什么解决方案,Jdk不能升级的情况
  • ¥15 画两个图 python或R
  • ¥15 在线请求openmv与pixhawk 实现实时目标跟踪的具体通讯方法
  • ¥15 八路抢答器设计出现故障
  • ¥15 opencv 无法读取视频
  • ¥15 按键修改电子时钟,C51单片机