Запись в базу кирилицой



  • возникла необходимость выгрузки заказов из базы, но обнаружилась вот такая ситуация, в таблице shopkeeper3_purchases в столбцах data и options русские символы выглядят вот так:

    \u0422\u0426 \u0414\u0437\u0435
    

    Если правильно понимаю это коды юникода. Как сделать что бы в базу записывались нормальные символы вместо кодов юникода?


  • Администраторы

    Это JSON. Переводится в массив функцией php.net/json_decode



  • А как сделать так, что бы сразу записывалось в базу кириллицей?



  • Никак или пиши свой псевдо JSON

    $name = 'Вася';
    $myJSON = "{'name':'$name'}";
    

    И так далее...



  • Помогите разобраться, пытаюсь вывести строку с базы и перевести функцией json_decode, но в итоге получаю пустоту

    $sql = "SELECT options FROM modx_shopkeeper3_purchases where id = 65";
    $json = mysqli_query($connection, $sql) or die("Ошибка запроса: " . mysqli_error($connection));
    while ($row = mysqli_fetch_assoc($json)) {
        $returnValue = json_decode($row,true);
        echo ($returnValue);
    }
    

    есть мнение, что записи в базе не utf8, т.к. при попытке получить просто пару строк:

    $sql = "SELECT id, name FROM modx_shopkeeper3_purchases where id = 65";
    $json = mysqli_query($connection, $sql) or die("Ошибка запроса: " . mysqli_error($connection));
    while ($row = mysqli_fetch_assoc($json)) {
        echo $row['id'];
        echo $row['name'];
    }
    

    Получаю вот это: 65 ▒▒▒▒▒▒

    Что конкретно делаю не так?

    Если у кого есть возможность помочь в выгрузке заказов в txt, помогите, буду благодарен материально.



  • Попробуй так с помощью iconv

    $sql = "SELECT id, name FROM modx_shopkeeper3_purchases where id = 65";
    $json = mysqli_query($connection, $sql) or die("Ошибка запроса: " . mysqli_error($connection));
    while ($row = mysqli_fetch_assoc($json)) {
        $row= iconv('Windows-1251','UTF-8',  $row);
        echo $row['id'];
        echo $row['name'];
    }
    

  • Администраторы

    В JSON только две колонки "data" и "options".

    $row['data'] = json_decode($row['data'], true);
    $row['options'] = json_decode($row['options'], true);
    


  • Спасибо всем за помощь, скидываю скрипт, может кому пригодится

    <?php
    $db=mysql_connect("localhost","user","pass") or die ('Ошибка подключения к бд');
    mysql_select_db("database") or die ("База данных не найдена");
    mysql_query("set_client='utf8'",$db);
    mysql_query("set character_set_results='utf8'",$db);
    mysql_query("set collation_connection='utf8_general_ci'",$db);
    
    $result=mysql_query("SELECT o.id,p.name,p.data,o.price,p.options,o.contacts FROM `modx_shopkeeper3_orders` as o LEFT JOIN `modx_shopkeeper3_purchases` as p on `o`.`id`=`p`.`order_id`",$db);
    $file_name=__DIR__.DIRECTORY_SEPARATOR.'export_'.date('Y_m_d_H_i_s').'.txt';
    if($result){
    	$handle=fopen($file_name,'w+');
    	while($row=mysql_fetch_assoc($result)){
    		$params=json_decode($row['options'],true);
    		$data=json_decode($row['data'],true);
    		$contacts=prepareContacts(json_decode($row['contacts'],true));
    		$txt=$row['id'].','.$row['name'].','.$data['weight'].','.$params['param1']['4'].','.$data['articul'].','.$row['price'].','.$contacts['fullname'].','.$contacts['phone'].','.$contacts['email'].'\r\n';
    		fwrite($handle,$txt);
    	}
    	fclose($handle);
    }
    
    function prepareContacts($contacts){
    	$result=[];
    	foreach($contacts as $field){
    		$result[$field['name']]=$field['value'];
    	}
    	return $result;
    }
    ?>
    


Похоже, подключение к Форум | MODX Shopkeeper было разорвано, подождите, пока мы пытаемся восстановить соединение.