Câu trả lời:
Tôi không biết cú pháp PDO cho nó, nhưng điều này có vẻ khá đơn giản:
$result = mysql_query("SHOW TABLES LIKE 'myTable'");
$tableExists = mysql_num_rows($result) > 0;
mysql_*
chức năng, chúng không còn chính thức , không còn được duy trì và sẽ bị xóa trong tương lai. Bạn nên cập nhật mã của mình với PDO hoặc MySQLi để đảm bảo chức năng của dự án trong tương lai.
Nếu bạn đang sử dụng MySQL 5.0 trở lên, bạn có thể thử:
SELECT COUNT(*)
FROM information_schema.tables
WHERE table_schema = '[database name]'
AND table_name = '[table name]';
Bất kỳ kết quả chỉ ra bảng tồn tại.
Từ: http://www.electrictoolbox.com/check-if-mysql-table-exists/
Sử dụng mysqli tôi đã tạo ra chức năng sau đây. Giả sử bạn có một ví dụ mysqli gọi là $ con.
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);
}
Hy vọng nó giúp.
Cảnh báo: khi được @jcaron kiểm tra, chức năng này có thể dễ bị tấn công bởi các biểu đồ vuông, vì vậy hãy đảm bảo $table
var của bạn sạch sẽ hoặc thậm chí sử dụng các truy vấn được tham số hóa tốt hơn.
Điều này được đăng đơn giản nếu bất cứ ai đến tìm câu hỏi này. Mặc dù nó đã được trả lời một chút. Một số câu trả lời làm cho nó phức tạp hơn mức cần thiết.
Đối với mysql * Tôi đã sử dụng:
if (mysqli_num_rows(
mysqli_query(
$con,"SHOW TABLES LIKE '" . $table . "'")
) > 0
or die ("No table set")
){
Trong PDO tôi đã sử dụng:
if ($con->query(
"SHOW TABLES LIKE '" . $table . "'"
)->rowCount() > 0
or die("No table set")
){
Với điều này tôi chỉ cần đẩy các điều kiện khác vào hoặc. Và đối với nhu cầu của tôi, tôi chỉ cần chết. Mặc dù bạn có thể thiết lập hoặc để những thứ khác. Một số có thể thích if / other if / other. Đó là sau đó để loại bỏ hoặc sau đó cung cấp if / other if / other.
Đây là giải pháp của tôi mà tôi thích khi sử dụng các thủ tục được lưu trữ. Chức năng mysql tùy chỉnh để kiểm tra bảng tồn tại trong cơ sở dữ liệu hiện tại.
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
Vì "Hiển thị bảng" có thể chậm trên các cơ sở dữ liệu lớn hơn, tôi khuyên bạn nên sử dụng "MÔ TẢ" và kiểm tra xem bạn có nhận được đúng / sai không
$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";
}
}
Khung 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;
}
Nếu lý do muốn làm điều này là việc tạo bảng có điều kiện, thì 'TẠO BẢNG NẾU KHÔNG HIỆN TẠI' có vẻ lý tưởng cho công việc. Cho đến khi tôi phát hiện ra điều này, tôi đã sử dụng phương pháp 'MÔ TẢ' ở trên. Thêm thông tin tại đây: MySQL "TẠO BẢNG NẾU KHÔNG HIỆN TẠI" -> Lỗi 1050