На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! информация о разделе
user posted imageДанный раздел предназначается для обсуждения вопросов использования баз данных, за исключением составления запросов на SQL. Для этого выделен специальный раздел. Убедительная просьба - соблюдать "Правила форума" и не пренебрегать "Правильным оформлением своих тем". Прежде, чем создавать тему, имеет смысл заглянуть в раздел "Базы данных: FAQ", возможно там уже есть ответ.

Модераторы: Chow, Bas, MIF
  
> Почему не работает SQL запрос
    Отправляю запрос

    ExpandedWrap disabled
      <?
       
      $db = mysql_connect("localhost","arkadii","*****");
      mysql_select_db("a2-dashboard-template",$db);
       
      $result = mysql_query("SELECT * FROM sdelki-amocrm",$db);
      $myrow = mysql_fetch_array($result);
      echo $myrow["nazvanie-sdelki"];
       
      ?>


    В ответ:

    ExpandedWrap disabled
      Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in X:\home\test1.ru\www\index.php on line 20


    Подскажите, почему не работает?

    Скриншот таблицы: https://yadi.sk/i/KsyZjq_TWmEPrw
    У юзера arkadii есть полные права на базу и таблицу sdelki-amocrm
    Сообщение отредактировано: rownong@yandex.ru -
      Цитата
      Для запросов SELECT, SHOW, DESCRIBE, EXPLAIN и других запросов, возвращающих результат из нескольких рядов, mysql_query() возвращает дескриптор результата запроса (resource), или FALSE в случае ошибки

      Проверь на ошибку $result
        Цитата rownong@yandex.ru @
        Подскажите, почему не работает?

        ExpandedWrap disabled
          <?
           
          $db = mysql_connect("localhost","arkadii","*****");
          mysql_select_db("a2-dashboard-template",$db);
           
          $result = mysql_query("SELECT * FROM sdelki-amocrm",$db);
          if (!$result) {
              die('Неверный запрос: ' . mysql_error());
          }
          $myrow = mysql_fetch_array($result);
          echo $myrow["nazvanie-sdelki"];
           
          ?>
          rownong@yandex.ru, в дополнение к дополнению к коду от Gonarh :lol: - так же следует проверять результаты работы и mysql_connect, и mysql_select_db, на всякий случай. Не зря же они тоже могут возвращать неуспешное выполнение. А еще глянуть свою версию PHP и свериться с доками ... не устарели ли эти используемые функции на используемой версии PHP.
            Цитата rownong@yandex.ru @
            почему не работает?

            Потому что отправляемый запрос выглядит так:

            ExpandedWrap disabled
              SELECT * FROM sdelki-amocrm

            MySQL (как, впрочем, и любой другой SQL-сервер) однозначно воспринимает тире как оператор вычитания. И соответственно текст запроса в правильной интерпретации - мягко говоря, некорректный.

            Если автору запроса захотелось отойти от конвенции именования, он ОБЯЗАН квотировать имена. В случае MySQL в качестве квотирующего символа используется обратная кавычка. Т.е. запрос, имеющий шанс заработать, выглядит так:

            ExpandedWrap disabled
              SELECT * FROM `sdelki-amocrm`


            Хотя гораздо правильнее - переименовать все объекты, имена которых не соответствуют стандарту.
              Спасибо за ответы.
              Поставил обратную кавычку ` у названии таблицы и заработало.
              Не знал, спасибо.
              У меня много где в БД тире для связки слов. Как лучше тогда подписывать:
              "sdelki-amocrm" => "sdelkiAmocrm"?
                Проверку $result сделал так (работает)
                ExpandedWrap disabled
                  /* Делаем выборку из таблицы ИЛИ вывести ошибку */
                  $result = mysql_query("SELECT * FROM `sdelki-amocrm`")
                  or exit("Ошибка в SQL запросе: " . mysql_error());

                Хочу еще повесить сообщение на подключение к серверу mysql.
                Попробовал но не заработало

                ExpandedWrap disabled
                  /* Подключаемся к серверу mysql */
                  $db = mysql_connect("localhost","arkadii","123456");
                  or die("Ошибка подключения к серверу MySQL: " . mysql_error());

                Сделал по аналогии, почему на сработало?
                Вернуло https://yadi.sk/i/LaLNrn-v5Oi_Fw

                С проверкой таблицы тоже не сработало
                ExpandedWrap disabled
                  /* Подключаемся к нужной таблице*/
                  mysql_select_db("a2-dashboard-template1",$db);
                  or exit("Ошибка: " . mysql_error());
                  Цитата
                  Как лучше тогда подписывать:
                  "sdelki-amocrm" => "sdelkiAmocrm"?

                  Лучше "sdelki_amocrm". Для всех имен очень желательно использовать snake_case (все буквы строчные, слова разделяются подчеркиваниями). Меньше сюрпризов в будущем.

                  Цитата
                  Попробовал но не заработало

                  Если сообщение об ошибке начинается со слов "Parse error" и "syntax error" - значит ошибка в синтаксисе программы. В данном случае точка с запятой перед оператором or совершенно лишняя - этот оператор является частью выражения, а не началом нового.

                  И вообще: текст сообщения об ошибке можно выделить мышкой и скопипастить текстом. Картинки и хостеры тут не нужны.

                  P. S. Извиняюсь за нескромный вопрос: а какими языками программирования ты уже владеешь?
                    Спасибо. Теперь работает. Сделал так:

                    ExpandedWrap disabled
                      <?
                       
                      /* Подключаемся к серверу mysql ИЛИ вывести ошибку */
                      $db = mysql_connect("localhost","arkadii","123456")
                      or exit("Ошибка в подключении к серверу MySQL: ".mysql_error());
                       
                      /* Подключаемся к базе ИЛИ вывести ошибку */
                      mysql_select_db("a2-dashboard-template",$db)
                      or exit("Ошибка в обращении к базе данных: ".mysql_error());
                       
                      /* Делаем выборку из таблицы ИЛИ вывести ошибку */
                      $result = mysql_query("SELECT * FROM `sdelki-amocrm`")
                      or exit("Ошибка в SQL запросе: " . mysql_error());
                       
                      /* Выборку помещаем в массив */
                      $myrow = mysql_fetch_array($result);
                       
                      /* Элемменты массива выводим на страницу */
                      echo $myrow["nazvanie-sdelki"];
                       
                      ?>


                    Ошибки подключения к базе и sql запроса теперь пишутся норм.
                    Только в ошибке подключения к серверу mysql вылазит инфа перед моим текстом. Почему?

                    ExpandedWrap disabled
                      Warning: mysql_connect() [function.mysql-connect]: Access denied for user 'arkadii'@'localhost' (using password: YES) in X:\home\test1.ru\www\index.php on line 17
                      Ошибка в подключении к серверу MySQL: Access denied for user 'arkadii'@'localhost' (using password: YES)


                    Добавлено
                    Цитата AVA12 @
                    P. S. Извиняюсь за нескромный вопрос: а какими языками программирования ты уже владеешь?

                    Начал изучать PHP и JS.
                    Сообщение отредактировано: rownong@yandex.ru -
                      Цитата rownong@yandex.ru @
                      Только в ошибке подключения к серверу mysql вылазит инфа перед моим текстом. Почему?

                      Потому, что сперва PHP ругается, а потом уже и ты за ним.
                      Как и как полно должен ругаться PHP, или не ругаться вообще - настраивается в конфиг-файле PHP.
                        Цитата JoeUser @
                        Потому, что сперва PHP ругается, а потом уже и ты за ним.
                        Как и как полно должен ругаться PHP, или не ругаться вообще - настраивается в конфиг-файле PHP.

                        Ок понял, спасибо
                        0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                        0 пользователей:


                        Рейтинг@Mail.ru
                        [ Script execution time: 0,0367 ]   [ 16 queries used ]   [ Generated: 18.04.24, 23:08 GMT ]