2016-11-28 1 views
-1

это мой код:попытаться вставить строку JSON с wpdb

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, "http://api.openweathermap.org/data/2.5/weather?q=".$location.",de&lang=de&APPID=abc"); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
$output = curl_exec($ch); //JSON string 
curl_close($ch); 

//json_decode($output); 
//serialize($output); 

$table_name = $wpdb->prefix . 'dmd_weather'; 
$wpdb->insert(
    $table_name, 
    array(
     'time' => current_time('mysql'), 
     'type' => 'wetter', 
     'key' => $location, //<- normal string 
     'value' => $output //<- json string 
    ) 
); 

Я не могу вставить данные с моим запросом выше.

Если я изменю var $output, как $output = 1, он отлично работает. Но не с json-строкой.

Есть ли трюк, чтобы вставить строки json в базу данных с wordpress?

ответ

-1

Я нашел проблему.

Поле в моей базе данных было только varchar (255).

Этого недостаточно для моей строки json.

0

Вам нужно бежать или JSON сериализованную строку, а вставляется JSON строку в базу данных из WordPress, как ниже ..

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, "http://api.openweathermap.org/data/2.5/weather?q=".$location.",de&lang=de&APPID=abc"); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
$output = curl_exec($ch); //JSON string 
curl_close($ch); 

//json_decode($output); 
//serialize($output); 

$final_output = mysql_real_escape_string($output); //<- final escaped string 

$table_name = $wpdb->prefix . 'dmd_weather'; 
$wpdb->insert(
    $table_name, 
    array(
     'time' => current_time('mysql'), 
     'type' => 'wetter', 
     'key' => $location, //<- normal string 
     'value' => $final_output //<- json string 
    ) 
); 
+0

Спасибо за ваш ответ. Но это не сработает. – cgee

0

Вы должны использовать mysql_real_escape_string функцию, чтобы избежать символов перед сохранением их в базу данных.

$output = mysql_real_escape_string($output); 
+0

Спасибо за ваш ответ. Но это не сработает. – cgee

+0

Можете добавить следующие строки в верхней части вашего скрипта, чтобы увидеть фактическую ошибку: error_reporting (E_ALL); ini_set ('display_errors', 1); – Techroshni

+0

Я нашел проблему. Поле в моей базе данных было только varchar (255). – cgee