2012-06-09 2 views
0

Я пытаюсь знать некоторую таблица пуста или нет, теперь я понял, этот вопрос с этим кодом:Запрос MySQLi о пустой таблице или нет?

// if table is empty it must return TRUE, if full FALSE 

private function isEmpty($tableName) 
{ 

    if ($result = $this->mysqli->prepare("SELECT COUNT(*) FROM ?")) 
    { 

      $result->bind_param("s",$tableName); 
      $result->execute(); 
      $row_cnt = $result->num_rows; 

      if (empty($row_cnt)) 
      { 

        return TRUE; 

      } 
      else 
      { 

        return FALSE; 

      } 

    } 

} 

этот код кажется не очень совершен, я хотел бы знать, существует ли лучше способ получить те же результаты, но с использованием predicat SQL EXISTS или что-то еще? Спасибо.

обновление: спасибо за комментарии и ответ, но в любом случае я не имею понятия, как это сделать, это вызывает ошибку:

$mysqli = new mysqli("localhost","root","","database"); 

if ($result = $mysqli->prepare("SELECT COUNT(*) FROM `talbe` LIMIT 1")) 
{ 

    $row = $result->fetch_row(); 

    echo "<pre>"; 
    print_r($row); 
    echo "</pre>"; 

    $result->close(); 

} 
$mysqli->close(); 

[Sat Jun 09 11:25:34 2012] [error] [client 127.0.0.1] PHP Fatal error: Call to undefined method mysqli_stmt::fetch_row() in F:\server\sites\home\test.loc\www\empty.php on line 9

обновлено:

$mysqli = new mysqli("localhost","root","","db"); 

if ($result = $mysqli->query("SELECT * FROM `table` LIMIT 1")) 
{ 

    if ($obj = $result->fetch_object()) 
    { 

     echo "NOT EMPTY"; 

    } 
    else 
    { 

     echo "empty"; 

    } 


    $result->close(); 

} 
$mysqli->close(); 

все.

+1

Я не думаю, что вы можете легко подготовить имя таблицы, подобное этому. –

+0

Мне все еще нужно решение, я не могу найти полный пример. Это выглядит так просто в mysql вместо mysqli. – AquaVita

+0

Есть ли опасность, что имя таблицы может быть вредным? Это исходит от пользователя? –

ответ

1

COUNT(*) подходит для определения пустой таблицы, при условии, что таблица не имеет большого количества строк.

Другим вариантом будет SELECT (something) FROM ${table} LIMIT 1;, если это возвращает результат, тогда таблица не пуста.

Но вы уверены, что можно установить имя таблицы с помощью параметра, подобного в mysqli? Я не думал, что это так, нужно проверить.

+0

@ Artefact2 err, 'SELECT COUNT (*) LIMIT 1' будет возвращать то же, что и' SELECT COUNT (*) ', no? (т. е. я думаю, что LIMIT применяется после COUNT (*)). Опять же, мне нужно проверить (это был долгий день!) –

+0

Ах да, вы правы, извините. Ну, просто «SELECT * LIMIT 1» должен сделать трюк. – Artefact2

Смежные вопросы