2017-10-14 10 views
-2

MySQLデータベースの特定のフィールドに外部からの読み取り専用アクセスを許可するPHPコードを記述しています。PHPループ内の最初のクエリが失敗する

各曜日に関連付けられたIDがあるテーブルがあり、毎日1つのクエリを実行し、シリアル化されたPHPオブジェクトを取得し、操作してJSONとして返す必要があります。次のように

私のコードは次のとおりです。

<?php 

// Connect to DB 
$link = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME); 
mysqli_set_charset($link, DB_CHARSET); 

$dayIds = ["Monday" => 3585, 
      "Tuesday" => 3586, 
      "Wednesday" => 3587, 
      "Thursday" => 3588, 
      "Friday" => 3589, 
      "Saturday" => 3590, 
      "Sunday" => 3591]; 

$dayData = []; 

// Iterate over days 
foreach($dayIds as $day => $dayId){ 
    // Create SQL 
    $sql = "select value from table_meta where day_id=".$dayId; 
    echo $sql."<br><br>"; 
    $result = mysqli_query($link, $sql); 

    // Get Result 
    $new_data = []; 
    $row = mysqli_fetch_row($result); 
    $data = unserialize($row[0]); 

    // Manipulate Data and add it to the new_data array 
    // 
    // (Hidden for confidentiality reasons) 
    // 

    $dayData[$key] = $new_data; 
    echo json_encode($new_data)."<br><br>"; 
} 

問題は、最初のクエリは、常に配列に月曜日と火曜日の順序を切り替えた後、月曜日の作品(それはfalseを返します)、私が試した失敗したということです火曜日には失敗します。

私は、シリアル化されていない結果をループしようとすると、 "Warning:無効な引数foreach()"が返されます。

これを解決するために、$ dayIds配列の先頭に別の要素を追加して動作させていますが、このコードはクライアントに送信されるため、最初に失敗する理由を解決したいと思います。

ありがとうございました。

+0

のようになりますあなたは' mysqli_error($リンク)の結果で見たことがありますか? – rickdenhaan

+0

'$ row = mysqli_fetch_row($ result);'の前に '$ data = unserialize($ row [0]); – Sean

+0

[無効な引数がforeach()に対して指定されている可能性があります(https://stackoverflow.com/questions/2630013/invalid-argument-supplied-for-foreach) –

答えて

0

$row = mysqli_*は、$dataより前である必要があります。

$data = unserialize($row[0]); 
$row = mysqli_fetch_row($result); 
0

DBからデータをフェッチする前に、データのシリアル化を解除しています。 `; あなたのコードは、この

$row = mysqli_fetch_row($result); 
$data = unserialize($row[0]); 
関連する問題