Как открыть текстовый файл и записать в него добавлять-стиль с php?

Вы запускаете четыре оператора IF, но в конце у вас есть только один END IF.

Сообщение об ошибке синтаксиса рядом с '' указывает, что оно разобралось до конца инструкции , ожидал найти больше синтаксиса (например, балансировки END IF для остальных вложенных IF операторов) и не нашел его. Синтаксическая ошибка пытается дать вам контекст, показывая вам, какой текст существует в оставшейся части инструкции после ошибки, но если он достигнет конца, прежде чем он обнаружит ошибку, то для сообщения не будет следующего текста.

Вместо этого вы можете использовать оператор CASE :

DELIMITER $$
DROP FUNCTION IF EXISTS check_if_exists$$
CREATE FUNCTION check_if_exists (
  object_name VARCHAR(100),
  db_name     VARCHAR(100),
  object_type ENUM('t', 'f', 'v', 'p')
)
RETURNS INT
READS SQL DATA
BEGIN
    DECLARE f_result INT DEFAULT 0;
    CASE object_type
    WHEN 't' THEN
        SELECT COUNT(1) INTO f_result
        FROM information_schema.TABLES AS t1
        WHERE t1.TABLE_SCHEMA = db_name 
          AND t1.TABLE_NAME = object_name;
    WHEN 'f' THEN
        SELECT COUNT(1) INTO f_result
        FROM information_schema.ROUTINES AS info
        WHERE info.ROUTINE_SCHEMA = db_name 
          AND info.ROUTINE_TYPE = 'FUNCTION' 
          AND info.ROUTINE_NAME = object_name;
    WHEN 'v' THEN
        SELECT COUNT(1) INTO f_result
        FROM information_schema.VIEWS AS t1
        WHERE t1.TABLE_SCHEMA = db_name 
          AND t1.TABLE_NAME = object_name;
    WHEN 'p' THEN
        SELECT COUNT(1) INTO f_result
        FROM information_schema.ROUTINES as info
        WHERE info.ROUTINE_SCHEMA = db_name 
          AND info.ROUTINE_TYPE = 'PROCEDURE' 
          AND info.ROUTINE_NAME = object_name;
    END CASE;
    RETURN (f_result);
END$$
DELIMITER ;

. Ваш комментарий:

Я пытаюсь использовать if ... else if ... else как любой другой язык. Больше нет, если в mysql?

blockquote>

Не так, как вы использовали. Нет никакой «лестницы» с неопределенным числом предложений else-if в стандартном SQL.

Но многие языки позволяют блоку else содержать другой оператор if / then / else. Таким образом, вы можете создать сложный код ветвления.

IF ... THEN /* start 1st statement */
ELSE
    IF ... THEN /* start 2nd statement */
    ELSE
        IF ... THEN /* start 3rd statement */
        ELSE
        END IF /* end 3rd statement */
    END IF /* end 2nd statement */
END IF /* end 1st statement */

Языки, которые разрешают лестницы:

  • Perl (elsif] каждый ])
  • Ruby (elsif)
  • PHP (elseif)
  • Python (elif)
  • BASIC ( elseif)
  • PL / SQL (elsif)
  • PL / pgSQL (elsif)
  • F # (elif)

Языки, которые не допускают лестницы, но допускают вложенные структуры управления:

  • C
  • C ++
  • C #
  • Objective-C
  • Java
  • Javascript
  • ANSI SQL, Transact-SQL
  • Pascal, Delphi
  • Awk
  • Scala
  • Haskell
  • R
  • Swift
  • Dart
  • Go

17
задан Chris_45 15 March 2010 в 16:52
поделиться

1 ответ

Чтобы добавить данные в файл, вам нужно открыть файл в режиме добавления (см. fopen ):

  • ' a '
    Открыто только для записи; поместите указатель файла в конец файла. Если файл не существует, попробуйте его создать.
  • 'a +'
    Открыт для чтения и записи; поместите указатель файла в конец файла. Если файл не существует, попробуйте его создать.

Итак, чтобы открыть textFile.txt в режиме добавления только записи :

fopen("textFile.txt", "a")

Но вы также можете использовать более простую функцию file_put_contents , которая объединяет ] fopen , fwrite и fclose в одной функции:

$data = sprintf("%s %s %s\n", $var1, $var2, $var3);
file_put_contents('textFile.txt', $data, FILE_APPEND);
40
ответ дан 30 November 2019 в 11:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: