2017-06-29 2 views
-1

私はcurl_execを使用してデータのためのPHPスクリプトを呼び出す簡単な方法を持っています。mySQLのエイリアスフィールド名がcurl_execで失敗するPHPコール

function load_entry_list($url) 
{  
    // Initialize an empty array to store entries 
    $entries = array(); 

    // Load the data from the API 
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); 
    $ch_data = curl_exec($ch); 
    curl_close($ch);   

    ***point of failure*** 
    if(!empty($ch_data)) // 
    { 
     // Convert the JSON into an array of entry objects 
     $json_data = json_decode($ch_data, TRUE); 
     foreach($json_data as $entry) 
     { 
      $entries[] = (object) $entry; 
     } 
     return $entries; 
    } 
    else 
    { 
     die('Something went wrong with the API request!'); 
    } 
} 

PHPスクリプトはこの

// Create connection 
$conn = new mysqli(DBHOST, DBUSER, DBPASS, DBNAME); 

// Check connection 
if ($conn->connect_error) { 
     die("Connection failed: " . $conn->connect_error); 
} 

$sql = "SELECT rec.id, rec.name, rec.submitted_by, rec.addDate, rec.hits, rec.metaDesc, rec.metaKeys, 
       IFNULL(pic.picPath,'default.png') as picPath, 
       var.catname as variety, cat.catname as category 
     FROM wms_recipes rec LEFT OUTER JOIN 
      wms_categories var on rec.cat = var.id LEFT OUTER JOIN 
      wms_categories cat on var.childOf = cat.id LEFT OUTER JOIN 
      wms_pictures pic on rec.id = pic.recipe 
     WHERE enRecipe = 'yes' 
      AND isApproved = 'no' 
     ORDER BY 1"; 

$result = $conn->query($sql); 

$rows = array(); 
if ($result->num_rows > 0) { 
    // output data of each row 
    while($row = $result->fetch_assoc()) {    
     $rows[] = $row; 
    } 
} 
$conn->close(); 

$articles = array(); 
foreach($rows as $item) {   
    $myArticle = new article(); 
    $myArticle->id = $item['id'];  
    $myArticle->name = $item['name']; 
    $myArticle->category = $item['category']; *** it will also work if I comment out this line 
    $myArticle->variety = $item['variety']; 
    $myArticle->submitted_by = $item['submitted_by']; 
    $myArticle->addDate = $item['addDate']; 
    $myArticle->hits = $item['hits']; 
    $myArticle->description = $item['metaDesc']; 
    $myArticle->keys = $item['metaKeys']; 
    $myArticle->picPath = IMAGES_URL.'recipe/'.$item['picPath']; 
    $articles[] = $myArticle; 
} 

header('Content-Type: application/json'); 
echo json_encode($articles); 
exit; 

UPDATEのようになります。私は私の呼び出し方法で、その後SQLクエリ

cat.catname as categoryを続けるならばここでが問題、

です$ch_dataから$ch_data = curl_exec($ch);empty

1つのカテゴリが問題を引き起こしていることが判明しました。

[11] => article Object 
    (
     [id] => 12 
     [name] => White Zinfandel from Fresh Juice 
     [category] => Rosé Wines 
     [variety] => Zinfandel 
     [submitted_by] => Jim Stevens 
     [addDate] => 2016-04-27 
     [hits] => 558 
     [description] => A good gift wine that all will like 
     [metaKeys] => 
     [picPath] => http://localhost/resources/images/recipe/default.png 
     [keys] => White Zinfandel 
    ) 

注カテゴリ名ロゼワイン:ここでは犯人の例があります。急性éが原因です。私が綴りを覚えれば、問題はなくなる。 SQLはそれを正常に返します。しかしcurl_exeはそれを好まない。だから私の質問はなぜ、どのように私はそれを修正するのですか?

+0

は、構文エラーのようですね。代わりのSQL文を表示する(あなたの質問を編集し、既存のコードの下に表示する)。 –

+0

これはSQL構文エラーではありません。両方のSQLをWorkbenchで実行しても、エラーは発生しません。別の方法として、$ myArticle-> category = $ item ['category']という割り当てを削除することもできます。戻ってくる配列から、それも良いです。 – JStevens

+0

コードを表示する... –

答えて

0

この問題を解決する最も簡単な方法は、このようなUTF-8へのMySQLの接続を強制することです:あなたはSQLに変更を加える際

$conn = new mysqli(DBHOST, DBUSER, DBPASS, DBNAME_WMS); $conn->set_charset("utf8");