PHP: Продолжай, вытащи меня

Почему мой второй, если никогда не выполняется? Кажется, что предложение continue выводит меня из foreach. Я пробовал elseif без успеха.

        foreach($columns as $i=>$column) 
        {
            // Check if column exists
            $sql = "SELECT '$column' FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = '$database' AND TABLE_NAME = '$strTable'";
            if(mysqli_real_query($link, $sql)) 
            {
                echo 'Column '.$column.' was created! <br>';
                continue; 
            }
            $sql = "alter table '$strTable' add column '$column' varchar (30)"; 
            if(mysqli_real_query($link, $sql)) 
            {
                echo 'Column '.$column.' was created! <br>';
            }
            $cols .= $column.','; 
        }

person PM1625637    schedule 10.10.2019    source источник
comment
continue означает запуск следующей итерации цикла, пропуская остальную часть тела.   -  person Barmar    schedule 11.10.2019
comment
Просто удалите файл continue.   -  person Obsidian Age    schedule 11.10.2019
comment
цель состоит в том, чтобы НЕ добавлять столбец, который уже существует.   -  person PM1625637    schedule 11.10.2019


Ответы (1)


Вы не проверяете, нашел ли запрос какие-либо строки. mysqli_real_query() выполняется успешно, пока не возникает ошибка, но это не означает, что запрос соответствует чему-либо. Вам нужно получить результат запроса.

Кроме того, вы просто проверяете, существует ли таблица, а не существует ли этот столбец в таблице.

continue пропускает всю оставшуюся часть тела цикла. Вы должны использовать else для выполнения второго блока, когда столбец не найден.

Используйте mysqli_query(), если хотите использовать результат. В противном случае вам нужно сначала вызвать mysqli_use_result() и mysqli_store_result(); см. разницу между mysqli_query и mysqli_real_query

foreach($columns as $column) 
{
    // Check if column exists
    $sql = "SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS 
            WHERE TABLE_SCHEMA = '$database' AND TABLE_NAME = '$strTable' AND COLUMN_NAME = '$column'";
    $result = mysqli_query($link, $sql);
    if(mysqli_num_rows($result) > 0) 
    {
        echo 'Column '.$column.' already exists! <br>';
    } else {
        $sql = "alter table '$strTable' add column '$column' varchar (30)"; 
        if(mysqli_real_query($link, $sql)) 
        {
            echo 'Column '.$column.' was created! <br>';
        }
    }
    $cols .= $column.','; 
}
person Barmar    schedule 10.10.2019
comment
Предупреждение: mysqli_num_rows() ожидает, что параметр 1 будет mysqli_result, задано логическое значение - person PM1625637; 11.10.2019
comment
$sql = SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS, ГДЕ TABLE_SCHEMA = '$database' AND TABLE_NAME = '$strTable' AND COLUMN_NAME = '$column'; - person PM1625637; 11.10.2019