Helpex - Trao đổi & giúp đỡ Đăng nhập
121

Cách tốt nhất để kiểm tra xem một bảng có tồn tại trong MySQL (tốt nhất là thông qua PDO trong PHP) mà không đưa ra một ngoại lệ. Tôi không cảm thấy như phân tích kết quả của "HIỂN THỊ BẢNG THÍCH" et cetera. Phải có một số loại truy vấn boolean?

121 hữu ích 0 bình luận 109k xem chia sẻ
10 trả lời 10
198

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;
198 hữu ích 5 bình luận chia sẻ
39

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/

39 hữu ích 5 bình luận chia sẻ
8

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: do @jcaron bị chặn bởi 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 $tablevar 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.

8 hữu ích 4 bình luận chia sẻ
3

Đâ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
3 hữu ích 0 bình luận chia sẻ
3

Đ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.

3 hữu ích 0 bình luận chia sẻ
2

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`");
2 hữu ích 1 bình luận chia sẻ
1
$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";
    }
}
1 hữu ích 2 bình luận chia sẻ
1

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;

    }
1 hữu ích 0 bình luận chia sẻ
1

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

1 hữu ích 0 bình luận chia sẻ
9

Tại sao bạn làm cho nó rất khó hiểu?

function table_exist($table){ 
    $pTableExist = mysql_query("show tables like '".$table."'");
    if ($rTableExist = mysql_fetch_array($pTableExist)) {
        return "Yes";
    }else{
        return "No";
    }
} 
9 hữu ích 1 bình luận chia sẻ
loading
Không tìm thấy câu trả lời bạn tìm kiếm? Duyệt qua các câu hỏi được gắn thẻ php mysql pdo database , hoặc hỏi câu hỏi của bạn.

Có thể bạn quan tâm

loading