下面的代码工作正常,但在连接到不存在的数据库时会抛出警告。这在错误关闭的产品中工作正常,但如果我不需要,我宁愿没有错误。
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;
}
答案 0 :(得分:3)
我知道答案有点太迟了,而且已经有人接受了答案,但我会留下评论以防将来有人需要。
使用PHP中的@符号来抑制警告/错误不是一个好习惯。您可能会意外地抑制无效的用户名或密码消息,而您永远不会知道它。
检查数据库是否存在的更合适的方法是创建Mysql或Mysqli的新实例(不指定默认数据库)并执行以下查询(类似于Marc 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;
它有点长,但更安全。
答案 1 :(得分:2)
这样做,只需在此代码中替换$ dbname:
if (empty (mysql_fetch_array(mysql_query("SHOW DATABASES LIKE '$dbname' ")))){
echo "DB does Not exist"; }else{ echo "DB exists!";}
答案 2 :(得分:1)
$mysqli = @new mysqli(CPANEL_DB_HOST, $dbuser, CPANEL_DB_PASS, $dbname);
以上作品!
答案 3 :(得分:0)
更新为MYSQLI:
$conn = new mysqli('localhost', 'root', '');
$dbname='test';
if (empty (mysqli_fetch_array(mysqli_query($conn,"SHOW DATABASES LIKE '$dbname'"))))
{
echo "DB not exist<br>";
}
else
{
echo "DB exist<br>";
}