Я struggeling с крошечным скрипт, который отвечает за 2 вещи: - усечения базы данных - загрузки файлов в базу данныхPHP - File получить содержание и правильное кодирование
выглядит так:
<?php
error_reporting(E_ALL);
ini_set('display_errors', '1');
$mysql_host = 'localhost';
$mysql_username = 'x';
$mysql_password = 'y';
$mysql_database = 'z';
$db = new PDO('mysql:dbname='.$mysql_database.';host='.$mysql_host,$mysql_username,$mysql_password);
// works not with the following set to 0. You can comment this line as 1 is default
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, 1);
function truncate_db()
{
global $db;
$sql_query_1 = "
TRUNCATE TABLE `VISITS`;
TRUNCATE TABLE `ANIMALS`;
TRUNCATE TABLE `DOCTORS`;
TRUNCATE TABLE `PAYMENTS`;
TRUNCATE TABLE `CUSTOMER`
";
try {
$stmt = $db->prepare($sql_query_1);
$stmt->execute();
echo "Truncate action - OK";
}
catch (PDOException $e)
{
echo $e->getMessage();
die();
}
}
function import_db()
{
global $db;
try
{
$sql_query_2 = implode(array_map(function ($v) {
return file_get_contents($v);
}, glob(__DIR__ . "/*.sql")));
$qr = $db->exec($sql_query_2);
echo "Import action - OK";
}
catch (PDOException $e)
{
echo 'Connection failed: ' . $e->getMessage();
}
}
truncate_db();
echo '<br />';
import_db();
$db = null;
?>
Проблема - файлы (sql one), которые я загружаю в базу данных, содержат специальные символы (например, ś, ó, ę и т. Д.). После этого у меня есть проблема в базе данных, что некоторые слова не содержат больше тех символы. После загрузки у меня есть такие символы, как: ³, ¿и т. Д. Как отредактировать функцию import_db(), чтобы сохранить эти символы? я думал о:
mb_convert_encoding
, но я понятия не имею, как включить это в мой код,/в моей таблице БД, колонка с того, что слова (содержащий специальные символы) устанавливается: utf8_general_ci. благодаря!
попробуйте добавить: $ dbh = new PDO ('mysql: charset = utf8mb4'); – Naruto
попробуйте это - $ db = new PDO ('mysql: dbname ='. $ Mysql_database. '; Host ='. $ Mysql_host, $ mysql_username, $ mysql_password; charset = utf8); –
не работает. Когда я использую ваш код OR $ db-> exec ('SET NAMES utf8'); он просто отсекает все в слове после этого специального символа :( –