Почему не работает SQL запрос
    
  ![]()  | 
Наши проекты:
 Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту  | 
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS | 
| [216.73.216.0] | 
 
 | 
		
  | 
    информация о разделе
  ![]()  | Данный раздел предназначается для обсуждения вопросов использования баз данных, за исключением составления запросов на SQL. Для этого выделен специальный раздел. Убедительная просьба - соблюдать "Правила форума" и не пренебрегать "Правильным оформлением своих тем". Прежде, чем создавать тему, имеет смысл заглянуть в раздел "Базы данных: FAQ", возможно там уже есть ответ. | 
    Почему не работает SQL запрос
    
  | 
         
         
         
          
           Сообщ.
           #1
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
          Отправляю запрос 
        
      ![]() ![]() <? $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"]; ?> В ответ: ![]() ![]() 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  | 
    
| 
         
         
         
          
           Сообщ.
           #2
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
         Цитата  Для запросов SELECT, SHOW, DESCRIBE, EXPLAIN и других запросов, возвращающих результат из нескольких рядов, mysql_query() возвращает дескриптор результата запроса (resource), или FALSE в случае ошибки Проверь на ошибку $result  | 
    
| 
         
         
         
          
           Сообщ.
           #3
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
         Цитата rownong@yandex.ru @  Подскажите, почему не работает? ![]() ![]() <? $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"]; ?>  | 
    
| 
         
         
         
          
           Сообщ.
           #4
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
          rownong@yandex.ru, в дополнение к дополнению к коду от Gonarh  
        
         - так же следует проверять результаты работы и mysql_connect, и mysql_select_db, на всякий случай. Не зря же они тоже могут возвращать неуспешное выполнение. А еще глянуть свою версию PHP и свериться с доками ... не устарели ли эти используемые функции на используемой версии PHP.   | 
    
| 
         
         
         
          
           Сообщ.
           #5
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
         Цитата rownong@yandex.ru @  почему не работает? Потому что отправляемый запрос выглядит так: ![]() ![]() SELECT * FROM sdelki-amocrm MySQL (как, впрочем, и любой другой SQL-сервер) однозначно воспринимает тире как оператор вычитания. И соответственно текст запроса в правильной интерпретации - мягко говоря, некорректный. Если автору запроса захотелось отойти от конвенции именования, он ОБЯЗАН квотировать имена. В случае MySQL в качестве квотирующего символа используется обратная кавычка. Т.е. запрос, имеющий шанс заработать, выглядит так: ![]() ![]() SELECT * FROM `sdelki-amocrm` Хотя гораздо правильнее - переименовать все объекты, имена которых не соответствуют стандарту.  | 
    
| 
         
         
         
          
           Сообщ.
           #6
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
          Спасибо за ответы. 
        
      Поставил обратную кавычку ` у названии таблицы и заработало. Не знал, спасибо. У меня много где в БД тире для связки слов. Как лучше тогда подписывать: "sdelki-amocrm" => "sdelkiAmocrm"?  | 
    
| 
         
         
         
          
           Сообщ.
           #7
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
          Проверку $result сделал так (работает) 
        
      ![]() ![]() /* Делаем выборку из таблицы ИЛИ вывести ошибку */ $result = mysql_query("SELECT * FROM `sdelki-amocrm`") or exit("Ошибка в SQL запросе: " . mysql_error()); Хочу еще повесить сообщение на подключение к серверу mysql. Попробовал но не заработало ![]() ![]() /* Подключаемся к серверу mysql */ $db = mysql_connect("localhost","arkadii","123456"); or die("Ошибка подключения к серверу MySQL: " . mysql_error()); Сделал по аналогии, почему на сработало? Вернуло https://yadi.sk/i/LaLNrn-v5Oi_Fw С проверкой таблицы тоже не сработало ![]() ![]() /* Подключаемся к нужной таблице*/ mysql_select_db("a2-dashboard-template1",$db); or exit("Ошибка: " . mysql_error());  | 
    
| 
         
         
         
          
           Сообщ.
           #8
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
         Цитата  Как лучше тогда подписывать: "sdelki-amocrm" => "sdelkiAmocrm"? Лучше "sdelki_amocrm". Для всех имен очень желательно использовать snake_case (все буквы строчные, слова разделяются подчеркиваниями). Меньше сюрпризов в будущем. Цитата  Попробовал но не заработало Если сообщение об ошибке начинается со слов "Parse error" и "syntax error" - значит ошибка в синтаксисе программы. В данном случае точка с запятой перед оператором or совершенно лишняя - этот оператор является частью выражения, а не началом нового. И вообще: текст сообщения об ошибке можно выделить мышкой и скопипастить текстом. Картинки и хостеры тут не нужны. P. S. Извиняюсь за нескромный вопрос: а какими языками программирования ты уже владеешь?  | 
    
| 
         
         
         
          
           Сообщ.
           #9
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
          Спасибо. Теперь работает. Сделал так: 
        
      ![]() ![]() <? /* Подключаемся к серверу 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 вылазит инфа перед моим текстом. Почему? ![]() ![]() 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.  | 
    
| 
         
         
         
          
           Сообщ.
           #10
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
         Цитата rownong@yandex.ru @  Только в ошибке подключения к серверу mysql вылазит инфа перед моим текстом. Почему? Потому, что сперва PHP ругается, а потом уже и ты за ним. Как и как полно должен ругаться PHP, или не ругаться вообще - настраивается в конфиг-файле PHP.  | 
    
| 
         
         
         
          
           Сообщ.
           #11
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
         Цитата JoeUser @  Потому, что сперва PHP ругается, а потом уже и ты за ним. Как и как полно должен ругаться PHP, или не ругаться вообще - настраивается в конфиг-файле PHP. Ок понял, спасибо  |