Diskuze: Rozdílný charset?
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Tvůrce
Zobrazeno 9 zpráv z 9.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
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");
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
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");
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?
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ý
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
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í?
Možno je východzí charset nejaký iný. Tuším je to latin1, ale ruku do ohňa za to nedám
Zobrazeno 9 zpráv z 9.