PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
топаз
Отправлено: 08 Октября, 2018 - 10:44:48
Post Id


Новичок


Покинул форум
Сообщений всего: 3
Дата рег-ции: Окт. 2018  


Помог: 0 раз(а)




Здравствуйте. Подскажите где искать проблему,ибо сам уже не знаю,просмотрел всё что можно.
Пример из книги:
Кевин Янк "PHP и MySQL от новичка к профессионалу"
PHP:
скопировать код в буфер обмена
  1.  
  2.    try
  3.        {
  4.           $pdo = new PDO('mysql:host = localhost; dbname = ijdb', 'ijdbuser','mypassword');
  5.           $pdo->setAttribute ( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION) ;
  6.           $pdo->exec('SET NAMES "utf8" ');
  7.       }
  8.    catch ( PDOException $e )
  9.         {
  10.            $output = 'Невозможно подключиться к серверу баз данных.' . $e->getMessage() ;
  11.            include 'output.html.php' ;
  12.           exit () ;
  13.         }
  14.        
  15.  
  16. try
  17. {
  18.   $sql = 'SELECT joketext FROM joke';
  19.  $result = $pdo->query($sql);
  20.  
  21. }
  22. catch (PDOException $e)
  23. {
  24.   $error = 'Ошибка при выполнении запроса: ' . $e->getMessage();
  25.    include 'error.html.php';
  26.    exit();
  27. }
  28.  
  29.  
  30.  while ($row = $result->fetch())
  31. {
  32.    $jokes[] = $row['joketext'];
  33. }
  34. include 'jokes.html.php';
  35.  


К базе данных подключается без ошибок,при выборке из таблицы в браузере пишет такую вот штуку:

Ошибка при выполнении запроса: SQLSTATE[3D000]: Invalid catalog name: 1046 Aucune base n'a йtй sйlectionnйe

Я конечно понимаю что каталог инвалид,но там какой может быть инвалид не понимаю. Спасибо


Отредактировано модератором: armancho7777777, 09 Октября, 2018 - 14:48:06
 
 Top
Мелкий Супермодератор
Отправлено: 08 Октября, 2018 - 11:05:55
Post Id



Активный участник


Покинул форум
Сообщений всего: 11721
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 588 раз(а)




Не могу прочитать вашу локаль. Но ошибка 1046 - No database selected

Парсер DSN в PDO весьма глупый сам по себе. И pdo_mysql ошибками за найденные странные параметры не плюётся.
Короче говоря, пробелов в параметрах строки подключения к mysql быть не должно.
"dbname = ijdb" - параметр "dbname " вместо "dbname"
"dbname= ijdb" - параметр "dbname" правильный, базу искать будем с названием " ijdb"
"dbname=ijdb" - только так.
Ну хоть после ; стоит обработка isspace, 'mysql:host=localhost; dbname=ijdb', - так можно


-----
PostgreSQL DBA
 
 Top
топаз
Отправлено: 08 Октября, 2018 - 11:57:42
Post Id


Новичок


Покинул форум
Сообщений всего: 3
Дата рег-ции: Окт. 2018  


Помог: 0 раз(а)




Мелкий,у меня нет слов, заработало.Огромное Вам человеческое спасибо.
Я вот понять не могу,значит подключение к базе данных проходит,т.е. ошибку в блоке исключения не генерирует. А выборку из таблицы сделать не может.

Далее выходит с кодировками какая-то проблема:

Вот все шутки,которые есть в базе данных:
Зачем цыплёнок перешёл дорогу? Чтобы попасть на другую строну!

Кусок вывода из include 'jokes.html.php'; :
<body>
<p>Вот все шутки,которые есть в базе данных: </p>
<?php foreach ($jokes as $joke) : ?>
<blockquote>
<p> <?php echo htmlspecialchars ($joke,ENT_QUOTES,'UTF-8'); ?>
</p>
</blockquote>
<?php endforeach; ?>
</body>

Помощи не прошу чтобы не быть назойливым,поковыряюсь конечно,но и не отказываюсь если труда не составит ответить в какую сторону смотреть. Спасибо.

(Отредактировано автором: 08 Октября, 2018 - 12:06:59)

 
 Top
Мелкий Супермодератор
Отправлено: 08 Октября, 2018 - 13:09:35
Post Id



Активный участник


Покинул форум
Сообщений всего: 11721
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 588 раз(а)




топаз пишет:
Я вот понять не могу,значит подключение к базе данных проходит

Тут такой фокус, что к mysql действительно возможно подключиться абстрактно, не к какой-то конкретной БД, а просто подключиться и уже затем, например, запросить список доступных баз и подключиться к какой-то из них.
Можно даже данные читать не указывая имя базы подключения, но тогда имя базы необходимо будет указывать в самом запросе:

CODE (sql):
скопировать код в буфер обмена
  1. melkij@melkij:~$ mysql -u root
  2. Welcome TO the MySQL monitor.  Commands end WITH ; OR \g.
  3. Your MySQL connection id IS 48
  4. Server version: 5.5.60-0+deb8u1 (Debian)
  5.  
  6. Copyright (c) 2000, 2018, Oracle AND/OR its affiliates. ALL rights reserved.
  7.  
  8. Oracle IS a registered trademark of Oracle Corporation AND/OR its
  9. affiliates. Other names may be trademarks of their respective
  10. owners.
  11.  
  12. Type 'help;' OR '\h' FOR help. Type '\c' TO clear the current input statement.
  13.  
  14. mysql> SELECT * FROM test.foo;
  15. +------+
  16. | p    |
  17. +------+
  18. | 1    |
  19. +------+
  20. 1 row IN SET (0.00 sec)
  21.  
  22. mysql> SELECT * FROM foo;
  23. ERROR 1046 (3D000): No DATABASE selected
  24.  


Если же запросить неправильную базу - "dbname=wrongdb" - тогда ошибка будет именно на этапе подключения.

По поводу кодировки - пропишите для начала charset в DSN вместо set names запроса. Так правильнее
PHP:
скопировать код в буфер обмена
  1. $pdo = new PDO('mysql:host=localhost;dbname=ijdb;charset=utf8', 'ijdbuser','mypassword');

jokes.html.php в utf8 without bom?
Заголовок отправляется?
PHP:
скопировать код в буфер обмена
  1. header('Content-Type: text/html; charset=utf-8');

Ну и откуда в базе добавлялись данные? Руками каким-то sql-клиентом или с другого скрипта? У mysql может быть выключена валидация UTF8 для текстовых полей, да и вообще там знатный бардак с разными кодировками вплоть до каждого отдельного столбца... То есть к сожалению нельзя исключать вероятности, что данные в самой базе сохранены в битой кодировке.


-----
PostgreSQL DBA
 
 Top
топаз
Отправлено: 08 Октября, 2018 - 15:23:48
Post Id


Новичок


Покинул форум
Сообщений всего: 3
Дата рег-ции: Окт. 2018  


Помог: 0 раз(а)




Мелкий,ещё раз спасибо за ответ.Данные в БД заносились с другого скрипта.
Добавление charset результатов не принёс, кракозябры остались один-в-один одинаковыми. Заголовок не отправлялся,добавил,кракозябры преобразились в текст из БД,что и требовалось.
Но вывод самого HTML-файла <p>Вот все шутки,которые есть в базе данных: </p> ,стал выглядеть как:
��� ��� �����,������� ���� � ���� ������:

Голова вылезла- хвост застрял,хвост вылез-голова застряла. Радость

Пищу для размышления Вы мне подкинули, поковыряюсь ещё )))))
Скажите,а если в принципе кодировку не указывать, я так понимаю, проблема может придти непонятно откуда,так? т.е. кодировку надо контролировать,или же есть какое-то универсальное решение. Какой бы вы совет дали при работе с кодировками?

P.S. блин,вот поражаешься порой,всё делаешь как написано,у них в книге значит вывод показан нормальный, а здесь же,непонятно что.Мистика Радость
 
 Top
Мелкий Супермодератор
Отправлено: 08 Октября, 2018 - 16:57:17
Post Id



Активный участник


Покинул форум
Сообщений всего: 11721
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 588 раз(а)




топаз пишет:
Какой бы вы совет дали при работе с кодировками?

выставлять явно utf8 везде где только найдёте... И даже после этого всё равно придётся помнить об отличиях многобайтовых кодировок от строго однобайтовых - много тут граблей собирать можно, к сожалению.


-----
PostgreSQL DBA
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB