【发布时间】:2010-12-04 06:58:26
【问题描述】:
在不抛出异常的情况下,检查 MySQL 中是否存在表(最好通过 PHP 中的 PDO)的最佳方法是什么。我不想解析“SHOW TABLES LIKE”等的结果。一定有某种布尔查询?
【问题讨论】:
在不抛出异常的情况下,检查 MySQL 中是否存在表(最好通过 PHP 中的 PDO)的最佳方法是什么。我不想解析“SHOW TABLES LIKE”等的结果。一定有某种布尔查询?
【问题讨论】:
我使用 mysqli 创建了以下函数。假设你有一个名为 $con 的 mysqli 实例。
function table_exist($table){
global $con;
$table = $con->real_escape_string($table);
$sql = "show tables like '".$table."'";
$res = $con->query($sql);
return ($res->num_rows > 0);
}
希望对你有帮助。
警告:@jcaron 建议此函数可能容易受到 sqlinjection 攻击,因此请确保您的 $table 变量是干净的,或者更好地使用参数化查询。
【讨论】:
如果想要这样做的原因是有条件的表创建,那么“CREATE TABLE IF NOT EXISTS”似乎是这项工作的理想选择。在我发现这一点之前,我使用了上面的“DESCRIBE”方法。更多信息在这里:MySQL "CREATE TABLE IF NOT EXISTS" -> Error 1050
【讨论】:
Zend 框架
public function verifyTablesExists($tablesName)
{
$db = $this->getDefaultAdapter();
$config_db = $db->getConfig();
$sql = "SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = '{$config_db['dbname']}' AND table_name = '{$tablesName}'";
$result = $db->fetchRow($sql);
return $result;
}
【讨论】:
由于“显示表”在大型数据库上可能会很慢,我建议使用“DESCRIBE”并检查结果是否为真/假
$tableExists = mysqli_query("DESCRIBE `myTable`");
【讨论】:
如果有人来寻找此问题,则会发布此信息。即使它被回答了一点。有些回复使它变得比它需要的更复杂。
对于我使用的 mysql*:
if (mysqli_num_rows(
mysqli_query(
$con,"SHOW TABLES LIKE '" . $table . "'")
) > 0
or die ("No table set")
){
在我使用的 PDO 中:
if ($con->query(
"SHOW TABLES LIKE '" . $table . "'"
)->rowCount() > 0
or die("No table set")
){
有了这个,我只是将 else 条件推入 or。为了我的需要,我只需要死。虽然你可以设置或其他的东西。有些人可能更喜欢 if/else if/else。然后删除 or 然后提供 if/else if/else。
【讨论】:
这是我在使用存储过程时更喜欢的解决方案。自定义mysql函数用于检查当前数据库中是否存在表。
delimiter $$
CREATE FUNCTION TABLE_EXISTS(_table_name VARCHAR(45))
RETURNS BOOLEAN
DETERMINISTIC READS SQL DATA
BEGIN
DECLARE _exists TINYINT(1) DEFAULT 0;
SELECT COUNT(*) INTO _exists
FROM information_schema.tables
WHERE table_schema = DATABASE()
AND table_name = _table_name;
RETURN _exists;
END$$
SELECT TABLE_EXISTS('you_table_name') as _exists
【讨论】:
$q = "SHOW TABLES";
$res = mysql_query($q, $con);
if ($res)
while ( $row = mysql_fetch_array($res, MYSQL_ASSOC) )
{
foreach( $row as $key => $value )
{
if ( $value = BTABLE ) // BTABLE IS A DEFINED NAME OF TABLE
echo "exist";
else
echo "not exist";
}
}
【讨论】:
你为什么这么难理解?
function table_exist($table){
$pTableExist = mysql_query("show tables like '".$table."'");
if ($rTableExist = mysql_fetch_array($pTableExist)) {
return "Yes";
}else{
return "No";
}
}
【讨论】:
我不知道它的 PDO 语法,但这似乎很简单:
$result = mysql_query("SHOW TABLES LIKE 'myTable'");
$tableExists = mysql_num_rows($result) > 0;
【讨论】:
mysql_* 函数不再支持,它们是 officially deprecated,不再维护,将在未来。您应该使用PDO 或MySQLi 更新您的代码,以确保您的项目在未来的功能。
如果您使用的是 MySQL 5.0 及更高版本,您可以尝试:
SELECT COUNT(*)
FROM information_schema.tables
WHERE table_schema = '[database name]'
AND table_name = '[table name]';
任何结果都表明该表存在。
发件人:http://www.electrictoolbox.com/check-if-mysql-table-exists/
【讨论】: