2011-05-16 141 views
1

下面的代碼工作正常,但它在連接到不存在的數據庫時會引發警告。這在錯誤關閉的產品中可以正常工作,但如果我不需要,我寧願不會有錯誤。檢查數據庫是否存在(mysql + php)

function cpanel_db_connect($dbname) { 
    // normalize 
    $dbname = convert_to_slug($dbname); 
    $dbname = CPANEL_USER . '_' . $dbname; 

    $dbuser = CPANEL_USER . '_' . CPANEL_DB_USER; 

    // connnect database 
    $mysqli = new mysqli(CPANEL_DB_HOST, $dbuser, CPANEL_DB_PASS, $dbname); 

    if ($mysqli->connect_error) { 
     return false; 
    } 

    return $mysqli; 
} 
+1

你也許可以簡單地用'@'運營商,例如抑制錯誤'$庫MySQLi = @new mysqli的(CPANEL_DB_HOST,$ DBUSER,CPANEL_DB_PASS,$ DBNAME);' – 2011-05-16 21:02:22

+2

由於您使用的mysqli的OOP版本,只是做在周圍連接部分一個try/catch。 – 2011-05-16 21:02:25

+0

你會得到什麼警告/錯誤? – 2011-05-16 21:03:57

回答

1
$mysqli = @new mysqli(CPANEL_DB_HOST, $dbuser, CPANEL_DB_PASS, $dbname); 

上述作品!

+1

您可能需要使用專用的登錄爲這樣的事情,並直接查詢INFORMATION_SCHEMA數據庫調查:'選擇INFORMATION_SCHEMA.SCHEMATA其中SCHEMA_NAME ='你的數據庫名here''比試圖連接到更好SCHEMA_NAME(可能不存在)數據庫並檢查錯誤。 – 2011-05-16 22:03:29

3

我知道答案有點太晚了,而且已經有了一個可以接受的答案,但我會留下評論以防將來有人需要它。

在PHP中使用@符號禁止警告/錯誤並不是一個好習慣。你可能會意外地禁止一個無效的用戶名或密碼信息,你永遠不會知道它。

一個檢查數據庫是否存在正在創建MySQL或MySQLi的新實例的更合適的方式(不指定默認數據庫),並執行以下查詢(類似於馬克·B的評論):

SELECT COUNT(*) AS `exists` FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMATA.SCHEMA_NAME='my_database_name' 

然後您可以檢查密鑰exists的值以查看數據庫是否存在。

下面是一個示例代碼:

// statement to execute 
$sql = 'SELECT COUNT(*) AS `exists` FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMATA.SCHEMA_NAME="my_database_name"'; 

// execute the statement 
$query = $mysqli->query($sql); 
if ($query === false) { 
    throw new Exception($mysqli->error, $mysqli->errno); 
} 

// extract the value 
$row = $query->fetch_object(); 
$dbExists = (bool) $row->exists; 

這是一個有點長,但它的安全。

0

這個工作,只是在此代碼替換$ DBNAME:

if (empty (mysql_fetch_array(mysql_query("SHOW DATABASES LIKE '$dbname' ")))){ 
echo "DB does Not exist"; }else{ echo "DB exists!";} 
相關問題