61

Re: Вивчаю базу даних MySql

Давно не залишав повідомлень, аж цілих 3 дня

http://не-дійсний-домен/picture/utf_08_05.jpg

наразі роздумую над такою проблемою, якщо виконати

show variables like "%character%"; 
show variables like "%collation%";

то в мене результат

http://не-дійсний-домен/ForumReplace/utf_08_07.jpg

як видно різні типи кодування встановлені як UTF08 так і cp1251,
частина UTF08 тому що в PhpMyAdmin виконав запит

SET NAMES utf8 COLLATE utf8_unicode_ci

=> відповідно я встановив кодування даних: character_set_client, character_set_connection, character_set_results, collation_connection щоб відповідало UTF08

далі...
потрібно додатково перевести ще кодування Бази Даних та кодування Серверу в utf08 ....... зараз на цьому і застряг :(

62

Re: Вивчаю базу даних MySql

Поки що не знаю але планую вирішити це питання слідуючим чином.
Встановив Heidisql а потім виконати

init_connect=‘SET collation_connection = utf8_unicode_ci’

чи щось придумати...., щоб змінити
character_set_database, character_set_server, collation_database, collation_server в UTF08

63 Востаннє редагувалося Анатолій (03.02.2015 12:42:28)

Re: Вивчаю базу даних MySql

вийшов такий варіант, це при тому що я власник бази даних,.. ну правильно навіщо господарю Бази Даних доступ до Бази Даних :)

http://не-дійсний-домен/ForumReplace/utf_08_08.jpg

http://не-дійсний-домен/ForumReplace/utf_08_09.jpg

64

Re: Вивчаю базу даних MySql

Логічне Завершення питання кодування
Хотів би закрити питання кодування даних СКБД MySQL, що розглядав вище,
закінчилась історія спілкуванням з адміністраторами мого хостингу сайту
Мій лист:

День Добрий.
Маю у Вас свій сайт, http://не-дійсний-домен/  та Бази Даних відповідно.Хотів би вирішити питання типу кодування даних Бази Даних. Якщо переглянути який тип кодування даних в моїх БД, то тобто половина даних в utf08, половина зберігається в cp1251 і як результат частково мої дані виходять як незрозумілі символи.
Власне питання, це Ви можете встановити всі елементи в utf08, чи я маю змогу якимсь чином змінити тип? Я хотів змінити тип кодування на utf08 вказавши SET GLOBAL character_set_server = utf8_general_ci
, але програми вказуюють що в мене не має прав на виконання таких операцій
"error 1227 access denied you need at least one of the super privilege s for this operation"
Дякую

їх відповідь:

Доброго дня.

На жаль, ми не можемо змінити глобальні дані налаштування сервера -- адже з ймовірністю 99% після такої зміни до нас звернуться 300 клієнтів, сайти яких перестануть працювати, оскільки при поточному кодуванні БД дані виводяться коректно, а при зміні кодування - дані будуть виводитись не коректно.
Радимо Вам у скриптах Вашого сайту вказувати кодування при з'єднанні з базою даних,
mysql_query ("set character_set_client='cp1251'");
mysql_query ("set character_set_results='cp1251'");
mysql_query ("set collation_connection='cp1251_general_ci'");

Подякували: 0xDADA11C71

65 Востаннє редагувалося Анатолій (07.02.2015 20:16:44)

Re: Вивчаю базу даних MySql

Тобто так і вийшло, для коректної роботи з даними потрібно додатково вказувати тип кодування даних вказавши mysqli_set_charset($con, "utf8");

як зразок,  може бути варіант:


<div class="execute_code" >
<?php
$con=mysqli_connect("localhost","my_user","my_password","my_db"); 

mysqli_set_charset($con, "utf8");

$sql="SELECT * FROM Transit ";
if ($result=mysqli_query($con,$sql))
  {
  mysqli_data_seek($result,4);
  $row=mysqli_fetch_row($result);
  printf ("Date: %s Town_from: %s Town_to: %s Carrier: %s \n", $row[1], $row[2], $row[3], $row[4]);
  mysqli_free_result($result);
}
mysqli_close($con);
?>

маю думку що глобальні налаштування кодування виставлені для багатьох сайтів (вони незмінні)

http://не-дійсний-домен/picture/utf_08_11.jpg

питання вирішується щодо одного сайту (встановлення відповідності кодування)
http://не-дійсний-домен/picture/utf_08_10.jpg

Подякували: 0xDADA11C71

66

Re: Вивчаю базу даних MySql

Написав про кодування статтю в тому об'ємі знань що маю :)

http://не-дійсний-домен/picture/utf_08_12.jpg

67

Re: Вивчаю базу даних MySql

Вибірка даних з таблиць БД, об'єкт даних

http://не-дійсний-домен/picture/select_01.jpg

Хотів би дещо прояснити з вибіркою даних з БД.
Я так думаю, все що ми вибираємо з БД за допомогою php-кодування - то є об'єкт. І програміст, що створює SQL-запит повинен чітко розуміти структуру об'єкту.

Наприклад,
1. такий SQL-запит повертає лише одне число:

SELECT id FROM test WHERE id = 1;

2. такий SQL-запит повертає масив даних:

SELECT id FROM test ORDER BY id ASC;

3. такий SQL-запит повертає асоціативний масив даних:

SELECT CustomerName,ContactName,Address,City FROM Customers;

тобто ми маємо об'єкт кожного разу як лише отримуємо дані з БД, розуміючи якої структури об'єкт (чи то одне число, чи то рядок даних, чи масив) відповідно створюємо код на виведення даних на екран
в випадку 1:

$res = $mysqli->query("SELECT id FROM test WHERE id = 1");
$row = $res->fetch_assoc();
printf("id = %s ", $row['id']);

в випадку 2:

$res = $mysqli->query("SELECT id FROM test ORDER BY id ASC");
for ($row_no = $res->num_rows - 1; $row_no >= 0; $row_no--) {
    $res->data_seek($row_no);
    $row = $res->fetch_assoc();
    echo " id = " . $row['id'] . "\n";
}

в випадку 3:

$result = $mysqli->query("SELECT CustomerName,ContactName,Address,City FROM Customers"); 
for ($row_no = $result->num_rows - 1; $row_no >= 0; $row_no--) 
{
   $result->data_seek($row_no);
   $row = $result->fetch_assoc();  
   echo $row['CustomerName'],$row['ContactName'],$row['Address'],$row['City'].'<br>';
}
Подякували: 0xDADA11C71

68

Re: Вивчаю базу даних MySql

Тільки но писав адмінку на PHP і розбирав саме це. Тому я вас покритикую:
    SELECT id FROM test WHERE id = 1; верне тіки один рядок, якщо id є унікальним, тобто не забувайте описувати властивості полів даних, що ви використовуєте в прикладах, бо початківці можуть подумати, що сама назва змінює призначення поля.

Подякували: Анатолій1

69

Re: Вивчаю базу даних MySql

По-перше на вашому малюнку зображено помилковий запит

select id from transport where 1

Такий код не видасть помилки, але не має жодного сенсу, бо він рівнозначний запиту

select id from transport

По-друге, хоча вам не доступно змінювати глобальні налаштування в MySQL, але на рівні таблиці це дозволяється.

Бачу що ви використовуєте HeidiSQL, то ж розгляньте цю картинку. Тут показується, де знаходиться потрібні опції (зверніть увагу, що це меню з'являється після того, як ви стали на таблицю, де хочете змінити кодування)
https://1933a544b9b651d3813e8de397efcd5a179e17e8.googledrive.com/host/0Bwk9euTxkxYUOFFUS29tSGJ4eXM/replace.org.ua/img/heidi-set-charset.png

Подякували: Анатолій1

70

Re: Вивчаю базу даних MySql

А навіщо вам там for з умовами,якщо можна так:

while($row = $result->fetch_assoc())
{
//вивід
}
Подякували: Анатолій1

71

Re: Вивчаю базу даних MySql

Дякую за зауваження, наразі я розглядаю патерни чи структуру вибору даних;
відмічу, що в мене поки немає чітко визначеного стилю кодування :) (об'єктно орієнтований чи то процедурний чи ПДО; так як і вподобань до варіантів виведення даних,- через for {.....} чи while {.....} чи іншим методом,.....)
але саме даний напрямок планую розглядати, бачу це слідуючим чином:.....

- Загальне, які дані ми можемо отримати з Бази Даних? Вважаю подана структура на малюнку має бути вірною, якщо я щось пропустив вкажіть, будь-ласка.


http://не-дійсний-домен/picture/select_02.jpg

72 Востаннє редагувалося Анатолій (14.02.2015 16:09:30)

Re: Вивчаю базу даних MySql

Для кожного варіанту вибірки даних (1,2,3,4 чи інший) з БД  планую розглянути варіанти php-кодування виведення даних на сторінку сайту.
P.S. Зараз знання відсутні :)

ktretyak написав:

По-друге, хоча вам не доступно змінювати глобальні налаштування в MySQL, ....

Я планую, дещо розібратись і пізніше встановити БД на домашньому ПК чи куплю який-небудь ПК, що був у використанні, і встановити на ньому повний варіант з можливістю мати повний доступ до всіх налаштувань, дистрибутивів; Та й перегляну іншу начинку MySQL

73

Re: Вивчаю базу даних MySql

використовуйте XAMPP - 10 хвилин встановлення і маєте апача, MySQL і багато іншого. ресурсів жере мало - я в себе на вбогій віртуалці у VirtualBox ставив.

Подякували: Chemist-i, Анатолій2

74

Re: Вивчаю базу даних MySql

Якщо говорити про веб-сервер, де ви тільки тестуєте роботу PHP, то з цим непогано справляється і сама PHP.
У Windows натискаєте Win+R, вводите cmd, натискаєте Enter, потім переходите в той каталог, де у вас знаходяться  ваш веб-проект і вводите

php -S localhost:8080

Це якщо у вас глобально встановлено php. Якщо ж ні - то

C:\path\to\php.exe -S localhost:8080

де C:\path\to\ - абсолютний шлях до файла php.exe

Коли запустите цей код, то швидше за все ваш фаєрвол спитає дозволу для відкриття порта 8080. Натискаєте ОК, переходите в браузер і відкриваєте localhost:8080, все повинно працювати.

Докладніше можете прочитати тут

Подякували: koala, Анатолій2

75

Re: Вивчаю базу даних MySql

На шляху створення статті "Вибірка даних з таблиць БД, об'єкт даних"

http://не-дійсний-домен/picture/select_06.jpg

Питання до спільноти, які є варіанти щоб вивести одне значення даного з БД?
Мої варіанти поки що:
обєктно-орієнтований стиль програмування

<?php 
$con->connect("localhost","my_user","my_password","my_db"); 
// Отримуємо об'єкт $result 
$result = $con->query("SELECT Town_from FROM Transit WHERE Id=1003");
//Отримуємо результуючу вибірку даного 
$row = $result->fetch_assoc(); 
printf ("Місто відправлення:%s \n", $row["Town_from"]); 
$con->close();
?> 

та процедурний

<?php 
$con=mysqli_connect("localhost","my_user","my_password","my_db"); 
// Отримуємо об'єкт $result 
$sql="SELECT Town_from FROM Transit WHERE Id='1003'";
$result=mysqli_query($con,$sql); 
//Отримуємо результуючу вибірку даного 
$row=mysqli_fetch_assoc($result); 
printf ("Місто відправлення:%s \n", $row["Town_from"]); 
mysqli_close($con);
?> 

76

Re: Вивчаю базу даних MySql

$result = $con->query("SELECT Town_from FROM Transit WHERE Id=1003 ")->fetch_assoc()['Town_from'];
echo $result;

Такий трюк доступний з PHP 5.4

Подякували: Анатолій1

77

Re: Вивчаю базу даних MySql

VTrim написав:
$result = $con->query("SELECT Town_from FROM Transit WHERE Id=1003 ")->fetch_assoc()['Town_from'];
echo $result;

Хотів перевірити але на хостингу стоїть 5.3.28, так що видає
"Parse error: syntax error, unexpected '[' in /home/best144/public_html/pages/article_select.php on line 285"
:(
але на своїй сторінці відмічу що таке є, пізніше можливо пригодиться,
білий вірш:
"менше коду більше кисню"
:)

78 Востаннє редагувалося VTrim (15.02.2015 21:51:39)

Re: Вивчаю базу даних MySql

Йдіть на безкоштовний http://hostinger.com.ua
Там в панелі виберіть версію PHP 5.4 або 5.5
Якщо на локалці не оновите.
Або ж на своєму хості подивіться.

79 Востаннє редагувалося Анатолій (16.02.2015 10:09:44)

Re: Вивчаю базу даних MySql

VTrim написав:

Йдіть на безкоштовний http://hostinger.com.ua
Там в панелі виберіть версію PHP 5.4 або 5.5
Якщо на локалці не оновите.
Або ж на своєму хості подивіться.

Щодо цього, я проплатив за свій сайт/хост  мені цього досить; а по декільком місцям бігати не хочу, щоб не розпилятись в тому плані трохи там, трохи тут; нехай вже всі напрацювання будуть в одному місці.


Дещо дивно в php-кодуванні; (чи скоріше потрібно просто вивчити як кажуть мат.частину програмування)
Наразі виводжу масив даних,  в одному випадку обєктно-орієнтований стиль:

$result = $con->query("SELECT Town_from FROM Transit LIMIT 4 ");
$result->data_seek(0); 
while ($row = $result->fetch_assoc()) {
echo " Місто: " . $row['Town_from'] . "<br>";}

в іншому процедурний:

$sql="SELECT Town_from FROM Transit LIMIT 4";
$result=mysqli_query($con,$sql); 
while($row = mysqli_fetch_assoc($result)) {
echo "Місто: " . $row["Town_from"]. "<br>";} 

Результат мене влаштовує:

Місто: Миколаїв
Місто: Київ
Місто: Львів
Місто: Херсон

Питання
В ОО стилю data_seek(0) !!!, і я так розумію fetch_assoc() добавляє +1 в циклі while.
В процедурному стилі не вказується data_seek і все працює.
Чи це я просто не коректно написав код, а інтерпретатор розумний сам все додумав :) ?

80

Re: Вивчаю базу даних MySql

$result->data_seek(0); там взагалі не потрібно