예외를 throw하지 않고 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에 취약 할 수 있으므로 $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
답변
“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";
}
}
