За последние 24 часа нас посетили 22934 программиста и 1243 робота. Сейчас ищут 736 программистов ...

Не отрабатывает скрипт

Тема в разделе "PHP для новичков", создана пользователем Reken, 19 ноя 2020.

Метки:
  1. Reken

    Reken Активный пользователь

    С нами с:
    4 июл 2019
    Сообщения:
    198
    Симпатии:
    5
    Подскажите пожалуйста, где я допустил ошибку в скрипте?

    Исходные данные:
    Есть таблица в mysql допустим users. Следующего вида:
    name | password
    Я добавил в эту таблицу столбик group, теперь таблица выглядит так:
    name | password | group

    Теперь мне нужно назначить группы всем учреждениям в этой таблице. Допустим есть пять учреждений, которым нужно присвоить группу "A".
    Запускаю php скрипт:
    Код (Text):
    1. <?php
    2.  
    3. ####################################################################################
    4. # Подключение к БД MySQL
    5.     $db_host = "localhost";
    6.     $db_user = "reken";
    7.     $db_password = "**********";
    8.     $db_base = 'start';
    9.    
    10.  
    11.     $mysqli = new mysqli($db_host,$db_user,$db_password,$db_base);
    12.     $mysqli->set_charset("utf8");
    13.  
    14.     // Osibka podkl
    15.     if ($mysqli->connect_error) {
    16.         die('ERROR : ('. $mysqli->connect_errno .') '. $mysqli->connect_error);
    17.     }
    18.  
    19. #####################################################################################
    20.  
    21.  
    22. ####################### Заполняем группу в таблице users
    23.  
    24. ## Массив с учреждениями группы A
    25. $A = array("СОШ1", "СОШ2", "СОШ3", "СОШ4", "СОШ5");
    26.  
    27. ## Добавляем запись в БД
    28. foreach ($A as $value){
    29. $result = $mysqli->query("UPDATE users SET group ='A' WHERE name = '$value'");
    30. }
    После выполнения скрипта, колонка group в таблице не меняется...
     
  2. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.824
    Симпатии:
    738
    Адрес:
    Татарстан
    1. лучше делать через IN без циклов
    Код (Text):
    1.  
    2. $values = implode("','",$A);
    3. $mysqli->query("UPDATE users SET group ='A' WHERE name IN('$values')");
    2. Мы не знаем вашу БД, может нет таких имен
     
  3. Reken

    Reken Активный пользователь

    С нами с:
    4 июл 2019
    Сообщения:
    198
    Симпатии:
    5
    Спасибо за помощь
    В таблице users есть имя СОШ1

    У меня даже простой скрипт не вносит изменения в таблицу users...
    Код (Text):
    1. $result = $mysqli->query("UPDATE users SET group ='A' WHERE name = 'СОШ1'");
    Я где то опечатку допускаю? Или в чем может быть дело? Почему скрипт не добавляет значение A для СОШ1 в колонку group таблицы users
     
  4. Reken

    Reken Активный пользователь

    С нами с:
    4 июл 2019
    Сообщения:
    198
    Симпатии:
    5
    Заметил следующее...
    Не важно в какой таблице, во всех что у меня есть в базе...

    Если пытаюсь обновить информацию в столбце, который был в таблице изначально (в момент создания таблицы), то скрипт успешно отрабатывает и вносит изменения.

    А вот если пытаюсь обновить информацию в столбце, которого изначально не было в таблице (столбец был добавлен позже), то тот же скрипт не отрабатывает, а ругается что я допустил синтаксическую ошибку...

    P.S.
    Добавлял столбик в таблицу не через php, а напрямую на серваке, через терминал:
    Код (Text):
    1. alter table users add `group` text NOT NULL;
    Вот такую ошибку вижу при запуске php скрипта
    Код (Text):
    1. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near
     
  5. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.824
    Симпатии:
    738
    Адрес:
    Татарстан
    Если хотите чтобы помогли
    - покажите структуру БД, где какие поля, каких типов ид другие опции
    - покажите ошибку полностью, а не только ее кусок. Там дальше будет показан конкретный SQL запрос вызвавший ошибку

    и зачем тип text ??? я думаю группы не более 10-20 ну 100 символов, так и задайте varchar(50)
     
  6. Reken

    Reken Активный пользователь

    С нами с:
    4 июл 2019
    Сообщения:
    198
    Симпатии:
    5
    По поводу varchar(50) согласен...Переделаю

    Структура таблицы users
    Код (Text):
    1. | Field    | Type | Null | Key | Default | Extra |
    2. +----------+------+------+-----+---------+-------+
    3. | name     | text | NO   |     | NULL    |       |
    4. | password | text | NO   |     | NULL    |       |
    5. | group    | text | NO   |     | NULL    |       |
    6. +----------+------+------+-----+---------+-------+
    7. 3 rows in set (0.00 sec)
    Скрипт на котором вылетает ошибка:
    Код (Text):
    1. $result = $mysqli->query("UPDATE `users` SET group = 'A' WHERE name = 'СОШ1'");
    Полное содержание ошибки:
    Код (Text):
    1. ERROR: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'group = 'A' WHERE name = 'СОШ1'' at line 1
     
  7. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.824
    Симпатии:
    738
    Адрес:
    Татарстан
    group - ключевое слово MySQL
    экранируйте апострофами
    `group`
     
  8. Reken

    Reken Активный пользователь

    С нами с:
    4 июл 2019
    Сообщения:
    198
    Симпатии:
    5
    Спасибо за помощь, всё получилось
    Теперь буду знать о "ключевых словах".