PHP检查MS SQL数据库是否存在?
我要检查数据库“示例”在我的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');
?>
你有几个问题:
-
首先,你是不是检查
sqlsrv_query()
的返回值,如果查询失败,返回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 Server数据库CATALOG
,但要检查SCHEMA_NAME
这是很好的模式,是默认SQL Server的架构dbo
。-
最后,您要检查是否有数据库存在试图在首位连接到数据库,所以如果数据库中不存在的连接失败,因为你没有检查的结果
sqlsrv_connect()
这可能是后来失败sqlsrv_query()
的原因。你必须连接到始终存在,而不是要检查数据库的数据库:$connectionInfo = array("UID"=>$uid, "PWD"=>$pwd, "Database"=>'YourMainDatabase'; // this database must exists
所以基本上,如果连接尝试到数据库失败,数据库不存在。如果它连接它存在。你知道如果数据库不存在,sql将返回的错误代码。如果我的连接出现问题(服务器错误),它将返回相同的错误 –
您可以根据失败的连接进行检测,并且[存在特定的错误代码](https://docs.microsoft.com/ en-us/sql/odbc/reference/appendixes/appendix-a-odbc-error-codes),但我认为最好使用'INFORMATION_SCHEMA'方法,无论如何,如果你要创建数据库如果不存在你需要一个工作连接。 –
[警告可能重复:SQLSRV \ _num \ _rows()预计参数1是资源,布尔给定](https://*.com/questions/35343796/warning-sqlsrv-num-rows-expects-parameter-1-to-be-resource-boolean-given) – jirigracik