IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Verquido
Tvůrce
Avatar
Verquido:12.2.2017 13:46

Mám asi rozdílný charset když se připojiji na databázi z 2 možností.

  1. vkládám do mysql data přes mysqli
  2. Vybírám data z databáze přes PDO

Neptejte se proč, ja vim že je to zbytečné, ale například když jeden člověk dělal to a druhý ono tak se to nesladí.
Může to být problém nebo jak se to dá opravit? :)

Editováno 12.2.2017 13:46
 
Odpovědět
12.2.2017 13:46
Avatar
Odpovídá na Verquido
Matúš Petrofčík:12.2.2017 14:21

Ako sa prejavuje tá rozdielnosť? Ak vložíš do DB dáta, a potom ich vyberieš a vypíšeš, tak máš také divné znaky?

U PDO by som pridal pri pripájaní nasledujúce nastavenia, asi takto nejako:

<?php

$settings = array(
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
        PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8", // <--- toto si všimni
        PDO::ATTR_EMULATE_PREPARES => false,
);

$connection = @new PDO(
        DB_TYPE . ":host=" . DB_HOST . ";port=" . DB_PORT . ";dbname=" . DB_NAME,
        DB_USER,
        DB_PASS,
        $settings // <--- a toto
);

U mysqli stačí:

<?php

$mysqli = new mysqli("localhost", "my_user", "my_password", "test");

/* change character set to utf8 */
$mysqli->set_charset("utf8");

alebo

<?php

$link = mysqli_connect('localhost', 'my_user', 'my_password', 'test');

/* change character set to utf8 */
mysqli_set_charset($link, "utf8");
Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
12.2.2017 14:21
obsah kocky = r^2 ... a preto vlak drnká
Avatar
Odpovídá na Matúš Petrofčík
Matúš Petrofčík:12.2.2017 14:27

U toho PDO by to malo ísť aj takto:

<?php
define('DB_CHARSET', 'utf8');

$settings = array(
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
        PDO::ATTR_EMULATE_PREPARES => false,
);

$connection = @new PDO(
        DB_TYPE . ":host=" . DB_HOST . ";port=" . DB_PORT . ";dbname=" . DB_NAME . ";charset=" . DB_CHARSET, // <--- tu som pridal charset
        DB_USER,
        DB_PASS,
        $settings
);

Namiesto tých 'DB_' konštánt si daj čo chceš, ja som definoval len ten charset :)

edit: toto funguje od PHP 5.3.6 ak som to dobre pochopil

Editováno 12.2.2017 14:29
Nahoru Odpovědět
12.2.2017 14:27
obsah kocky = r^2 ... a preto vlak drnká
Avatar
Verquido
Tvůrce
Avatar
Odpovídá na Matúš Petrofčík
Verquido:12.2.2017 16:10

Ano přesně tak, do DB se vkládalo v mysqli a vybírá se v PDO a píše to divné znaky.

na tom PDO mám nastaveno

$conn = new PDO("mysql:host={$server};dbname={$database};charset=utf8", $user, $pass);
$conn->exec("set names utf8");

a nejde to

Jinak to

PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8",

by mělo být prý totožné jako

$conn->exec("set names utf8");
 
Nahoru Odpovědět
12.2.2017 16:10
Avatar
Odpovídá na Verquido
Matúš Petrofčík:12.2.2017 16:14

Podľa mňa je lepšie to pridať do nastavení pri vytváraní PDO než volať samostatne exec. No ale to už ako ty chceš.

V tom prípade je problém pri vkladaní. Tam to máš ako?

Charset a collate tabuliek máš ako?

Editováno 12.2.2017 16:14
Nahoru Odpovědět
12.2.2017 16:14
obsah kocky = r^2 ... a preto vlak drnká
Avatar
Verquido
Tvůrce
Avatar
Odpovídá na Matúš Petrofčík
Verquido:12.2.2017 16:21

Já to přidám do toho nastavení a uvidím jestli to půjde :)

Jinak jsem dělal svůj Wrapper na PDO a potřeboval bych nějakou předlohu řešení na Výpis :) Neznáš nějaký dobrý?

Zatím mám TOHLE ale spoustu věcí tam nejde a nejsou dodělaný :)

Editováno 12.2.2017 16:22
 
Nahoru Odpovědět
12.2.2017 16:21
Avatar
Odpovídá na Verquido
Matúš Petrofčík:12.2.2017 16:26

Skús no :)

Ja som v mojich projektoch používal PDO Wrapper podobný (alebo založený na) tunajších tutoriáloch. V každom takom miniprojektíku som ho nejako inak upravil, ale napr. u toho projektu si ho môžeš pozrieť: https://github.com/…itnetwork.cz

Priamy link: https://github.com/…Database.php

Nahoru Odpovědět
12.2.2017 16:26
obsah kocky = r^2 ... a preto vlak drnká
Avatar
Verquido
Tvůrce
Avatar
Odpovídá na Matúš Petrofčík
Verquido:12.2.2017 18:33

Ok, vyřešeno. Problém byl v tom že v **mysqli **ten člověk vůbec nenastavil charset.

Proč se to vlastně nastavuje i u připojení když je to nastavený i na stránce i v databázi? Ono se to při posílání nějak převádí?

 
Nahoru Odpovědět
12.2.2017 18:33
Avatar
Odpovídá na Verquido
Matúš Petrofčík:12.2.2017 20:51

Možno je východzí charset nejaký iný. Tuším je to latin1, ale ruku do ohňa za to nedám :D

Nahoru Odpovědět
12.2.2017 20:51
obsah kocky = r^2 ... a preto vlak drnká
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 9 zpráv z 9.