IT

예외를 발생하지 않는 테이블이 존재하는지 MySQL 확인

lottoking 2020. 7. 13. 07:52
반응형

예외를 발생하지 않는 테이블이 존재하는지 MySQL 확인


예외가 발생하지 않고 MySQL에 테이블이 있는지 확인하는 가장 좋은 방법은 무엇입니까 (PHP의 PDO를 통해). "SHOW TABLES LIKE"등의 결과를 구문 분석하고 싶지 않습니다. 어떤 종류의 부울 쿼리가 필요하고 있습니까?


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 attacs에 부담 할 수 있으므로 $tablevar가 깨끗하거나 사용 하는지 확인하는 쿼리를 더 잘 사용 하는지 확인 합니다.


저장 프로 시저를 사용할 때 선호하는 솔루션은 다음과 가능합니다. 테이블을 확인하기위한 사용자 정의 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


누군가 가이 질문을 찾으면 간단하게 게시됩니다. 하지만 조금 대답합니다. 답글 중 일부는 필요 이상으로 복잡합니다.

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")
   ){

이것으로 다른 조건을 또는 푸시합니다. 그리고 내 필요에 따라 나는 단지 죽기 만하면됩니다. 당신은 다른 설정 설정하거나 접근 할 수 있습니다. 일부는 if / else if / else를 선호 할 수 있습니다. 그런 다음 if / else if / else를 제거하고 제공합니다.


"Show tables"는 더 큰 데이터베이스에서 수 있으므로 "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;

    }

원하는 이유가 조건부 테이블 생성 인 경우 'CREATE TABLE IF NOT EXISTS'는 작업에 존재합니다. 이것을 발견하기는 위의 'DESCRIBE'방법을 사용했습니다. 여기에 더 많은 정보 : MySQL "CREATE TABLE IF NOT EXISTS"-> Error 1050


왜 그렇게 이해하기 어렵게 만드나요?

function table_exist($table){ 
    $pTableExist = mysql_query("show tables like '".$table."'");
    if ($rTableExist = mysql_fetch_array($pTableExist)) {
        return "Yes";
    }else{
        return "No";
    }
} 

참고 URL : https://stackoverflow.com/questions/1525784/mysql-check-if-a-table-exists-without-throwing-an-exception

반응형

'IT' 카테고리의 다른 글

express.js 서버에 SSL 인증서를 어떻게 설정합니까?  (0) 2020.07.13
의 개행  (0) 2020.07.13
iPhone의 Facebook 앱과 같은 SplitView  (0) 2020.07.13
유닉스-파일의 머리와 꼬리  (0) 2020.07.13
내용을 변경하는 방법  (0) 2020.07.13