MySQL은 예외 없이 테이블이 존재하는지 확인합니다.
MySQL(PHP의 PDO를 통해 바람직하게는)에 테이블이 존재하는지 여부를 예외 없이 확인하는 가장 좋은 방법은 무엇입니까?SHOW TABles LIKE 등의 결과를 해석하고 싶지 않습니다.부울 쿼리 같은 게 있을 거야?
준비된 문을 사용하여 information_schema 데이터베이스를 조회하는 것이 가장 신뢰할 수 있고 안전한 솔루션인 것 같습니다.
$sql = "SELECT 1 FROM information_schema.tables
WHERE table_schema = database() AND table_name = ?";
$stmt = $pdo->prepare($sql);
$stmt->execute([$tableName]);
$exists = (bool)$stmt->fetchColumn();
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($con, $table){
$table = $con->real_escape_string($table);
$sql = "show tables like '".$table."'";
$res = $con->query($sql);
return ($res->num_rows > 0);
}
도움이 됐으면 좋겠다.
경고: @jcaron에 의해 제안되었듯이 이 함수는 sqlinjection attacs에 취약할 수 있습니다.따라서 반드시 다음 명령을 사용하십시오.$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")
){
이것으로 다른 조건을 or에 밀어 넣기만 하면 됩니다.그리고 내 욕구를 위해 난 그저 죽기만 하면 돼.설정이나 다른 것을 할 수 있지만.if/other 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;
}
이 작업을 수행하는 이유가 조건부 테이블 작성이라면 'CREATE TABLE IF EXISTES'가 작업에 이상적입니다.이것을 발견하기 전까지는, 상기의 「DESCRIBE」법을 사용했습니다.자세한 내용은 여기를 참조해 주세요.MySQL "CREATE TABLE IF NOT EXISTES" -> 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
'programing' 카테고리의 다른 글
PHP 키워드 'var'의 역할은 무엇입니까? (0) | 2023.01.20 |
---|---|
Java에서 두 세트를 비교하는 가장 빠른 방법은 무엇입니까? (0) | 2023.01.10 |
mysql-python 설치 오류: include 파일 'config-win'을 열 수 없습니다.h' (0) | 2023.01.10 |
mysql에서 datetime 필드를 인덱싱하는 것이 좋은 생각입니까? (0) | 2023.01.10 |
CPanel을 사용하여 크론 작업에서 PHP 파일 실행 (0) | 2023.01.10 |