PHP json закодировал данные из MySQLi в PDO - PullRequest
0 голосов
/ 09 января 2019

Я пытаюсь преобразовать сайт из MySQLi в PDO. На странице графиков возникла проблема, из-за которой графики не работают после перехода на PDO. Вывод json идентичен, за исключением PDO, вывод json оборачивается внутри неэкранированных двойных кавычек, а затем экранируются все кавычки в данных. Кто-нибудь знает, как изменить запрос PDO, чтобы удалить заключающие в кавычки и, возможно, все внутренние обратные слэши двойных кавычек из выходных данных json?

//MySQLi -----------------------------------------------
$con = mysqli_connect($db_server_address, $db_user_name, $db_password, $db_name) or die("Connection failed: " . mysqli_connect_error());
// Check connection
if (mysqli_connect_errno()) {
    echo "ERROR: Failed to connect to database: " . mysqli_connect_error() . "<br/><br/>";
}   

$sql = "
  SELECT * FROM table
";

$result = mysqli_query($con,$sql);
$data = array();
foreach ($result as $row) {
    $data[] = $row;
}
mysqli_close($con);
echo json_encode($data);


//PDO ------------------------------------------
$dsn = "mysql:host=$db_server_ip;dbname=$db_name;charset=$charset";
$options = [
    PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
    PDO::ATTR_EMULATE_PREPARES   => false,
];
try {
    $pdo = new PDO($dsn, $db_user_name, $db_password, $options);
} catch (\PDOException $e) {
    throw new \PDOException($e->getMessage(), (int)$e->getCode());
}    
$stmt = $pdo->query("
    SELECT * FROM table
");

$stmt->execute();
$results = $stmt->fetchAll(PDO::FETCH_ASSOC);
$json = json_encode($results);
echo json_encode($json);

Вывод данных:

//MySQLi Output-----------------------------------------------
[{"week_of":"2018-01-06","weekn":"1","Weekly_Ticket_Count":"8"},{"week_of":"2019-01-05","weekn":"1","Weekly_Ticket_Count":"12"}]

//PDO ------------------------------------------
"[{\"week_of\":\"2018-01-06\",\"weekn\":1,\"Weekly_Ticket_Count\":8},{\"week_of\":\"2019-01-05\",\"weekn\":1,\"Weekly_Ticket_Count\":12}]"

1 Ответ

0 голосов
/ 09 января 2019

Это не результат использования PDO, а результат двойного кодирования с помощью json encode (прямо здесь)

$json = json_encode($results);
echo json_encode($json);

Вы кодируете его один раз при установке $json, а затем снова кодируете его при выводе указанного JSON. Что приводит к двойному кодированию (экранирование " и т. Д.)

Все, что вам нужно сделать, чтобы это исправить - это удалить один из них (или объединить их)

echo json_encode($results);

OR

$json = json_encode($results);
echo $json;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...