如何检查mysql数据库的存在?

时间:2014-07-14 19:46:51

标签: php mysql

$pdo_mysql = new PDO("mysql:host=localhost", "ales", "alespass");
$result = $pdo_mysql->query("SHOW DATABASES LIKE `dbname`");
if ($result) { //not work.
    print "no";
} else {
    print "yes";
}

你不能使用CREATE DATABASE IF NOT EXISTS或新的PDO(“mysql:host = localhost; db = dbname”......

3 个答案:

答案 0 :(得分:1)

你对@robin的答案的评论中有错字错误,我认为条件应为if (!empty($result))带有感叹号。打印不存在,因为当数据库存在时$ result不为空。因此,使用此$result = $pdo_mysql->query("SHOW DATABASES LIKE '" . DB_NAME . "'"); if (!empty($result)) { print "exists"; } else { print "no exists"; }应该有效。我希望有帮助

答案 1 :(得分:0)

CREATE DATABASE IF NOT EXISTS

应该做的伎俩。如果没有,请先通过

检查是否存在
SELECT schema_name FROM information_schema.schemata WHERE schema_name = 'dbname'

它将返回数据库名称本身,因此您可以检查查询的计数是否为> 0,结果是!= 0 ......依此类推。但是你喜欢。

您的查询问题是反引号的使用错误,您需要使用单引号,而不是反引号。

<强>&#39;而不是“

答案 2 :(得分:0)

Manual

  

PDO::query()会返回PDOStatement对象,或者FALSE 会失败

您的查询有效且永远不会失败(忽略可能的较低级别问题)。

$result将始终评估为TRUE - ish,因此流程将始终进入if ($result)块。

if (empty($result))几乎没有意义)

您需要检查查询是否返回zero row(零结果错误)。


On second thought

  

如果关联的PDOStatement执行的最后一条SQL语句是SELECT语句,则某些数据库可能会返回该语句返回的行数。但是,对于所有数据库,无法保证此行为,并且不应依赖于便携式应用程序。

something like this更安全:

if ($result->fetch() === FALSE) {
    // result set is empty
}