Как автоматически создавать таблицы базы данных из массива - PullRequest
0 голосов
/ 19 июля 2011

Сегодня очень расстроился, пытаясь заставить это работать.

У меня есть около 20 таблиц, которые необходимо создать в начале сценария my php, если они не существуют.

Очевидным методом будет SQL-запрос CREATE IF NOT EXIST, однако яя не хочу запрашивать базу данных 20 раз просто для того, чтобы проверить, существуют они или нет, только когда я хочу их создать.

Я попытался перебрать массив таблиц, затем использовать SHOW ALL FROM database и сравнитьимена таблиц, однако, это не работает (я понятия не имею, почему).

$result=$db->query("SHOW TABLES FROM database");
$numrows=mysql_num_rows($result);

echo $numrows.' tables';

$found=null;

foreach ($table as $name => $fields) {
    while ($showall=mysql_fetch_array($result)) {
        if ($name==$showall[0]) {
            unset($found);
        }
    }

            if (isset($found)) {
                echo 'Table '.$name.' does not exist, creating...<br />';

                $db->query("CREATE TABLE ".$name." (".$fields.")");
            } else {
                echo 'Table '.$name.' exists<br />';

                //$db->query("CREATE TABLE ".$name." (".$fields.")");
            }

Это мой код до сих пор (версия 4, я считаю, после нескольких часов попыток заставить его работать).Как видите, я зацикливаюсь внутри цикла и сбрасываю переменную, если она находит совпадение.Звучит просто и ДОЛЖНО работать, но это не так.

1 Ответ

0 голосов
/ 19 июля 2011

Вы объявляете переменную $ found только дважды, и она объявляется как null оба раза.Из-за этого ваш код никогда не будет введен

if (isset($found)) {
                echo 'Table '.$name.' does not exist, creating...<br />';

                $db->query("CREATE TABLE ".$name." (".$fields.")");
            } 

Может быть, есть проблема?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...