Answers:
我不知道它的PDO语法,但这看起来很简单:
$result = mysql_query("SHOW TABLES LIKE 'myTable'");
$tableExists = mysql_num_rows($result) > 0;
如果您使用的是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/
使用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
var是干净的,甚至更好地使用参数化查询。
如果有人来寻找这个问题,就会将其发布。即使它得到了回答。一些答复使它变得比需要的更为复杂。
对于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条件推入或。为了我的需要,我只需要死。虽然可以设置或进行其他操作。有些人可能更喜欢if / else if / else。然后删除或然后提供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
由于在较大的数据库上,“显示表”的速度可能较慢,因此我建议使用“ DESCRIBE”并检查结果是否为true / false
$tableExists = mysqli_query("DESCRIBE `myTable`");
$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";
}
}
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”方法。更多信息在这里:MySQL“如果不存在则创建表”->错误1050