2017-05-10 102 views
0

我有這個PHP代碼來做一個查詢foreach循環遍歷變量$ rowA中的表名,但我得到了「數組到字符串轉換」錯誤。有誰知道爲什麼?我們可以這樣做查詢循環嗎?PHP foreach循環SQL表名查詢

$sql = "SELECT `id`, `first_name` FROM `clients` ORDER BY `id` DESC"; 
$result = $DB_CON_C->query($sql); 

$sql_email = "SELECT `email` FROM `clients` ORDER BY `id` DESC"; 
$account = $DB_CON_C->query($sql_email); 

    foreach($result as $row) { 
     foreach($account as $rowA) { 
     $stmt = "SELECT SUM(value) AS total_amount FROM `".$rowA."`"; 
     $amount = $DB_CON_C->query($stmt); 
     $sum = $amount->total_amount; 

     $data_row .= '<tr>' 
         . '<td>' .$row['id'].'</td>' 
         . '<td>' .$row['first_name'].'</td>' 
         . '<td>' .$sum.'</td>'; 
     } 
     } 
    } 
    $data_row .= '</tbody>' 
       . '</table>'; 
    echo $data_row; 
+0

哪一部分導致錯誤?什麼線? –

+0

我相信這行$ stmt =「SELECT SUM(value)AS total_amount」 。 「FROM'」。$ rowA。「'」; 導致錯誤。我只是不明白它的原因。 – MasterJoe

+0

只是爲了澄清;你的表列名稱是電子郵件地址? – Martin

回答

1

您試圖將數據庫行解析爲字符串,即使它只包含一件事情。

更改以下行

$stmt = "SELECT SUM(value) AS total_amount " 
      . "FROM `".$rowA."`"; 

$stmt = "SELECT SUM(value) AS total_amount " 
      . "FROM `".$rowA['email']."`"; 

$rowA是數據庫行,幷包含從數據庫中email領域。

+0

這解決了我的問題。感謝Dowe de Haan。但是,我意外地遇到了另一個我以前沒有的問題。這兩行: '​​'。$ row ['id']。'' '​​'。$ row ['first_name']。''的第一個foreach循環重複表中第一行的數據。 – MasterJoe

+0

嗯,奇怪。我會建議你看看答案[馬丁給了](http://stackoverflow.com/a/43899728/1336174),因爲我知道這肯定會解決你的問題。現在您有兩個可以合併的查詢,可以解決這個問題。此外,如果您可以使用數據庫結構編輯帖子,我們甚至可以幫助您更好! –

2

您處理數據值的方式似乎存在一個根本性問題。

把你的第一個查詢,$result,這將(顯然取決於具體$DB_CON_C類的方法)輸出id和值的數組first_name

然而,在第二個電話,$account使用你那麼同樣的方法調用這些值就好像它們是類變量$amount->total_amount

我會懷疑這些語法之一是錯誤的,但沒有看到你的班級我不能說哪個。

  • 你知道你的兩個SQL調用都返回整個數據庫嗎?

  • 您是否意識到您將一個表中的數據值(電子郵件地址)用作另一個表中的列名稱?這可以工作,但這實際上不是最佳實踐。

  • 您不需要在新行上使用字符串.作爲字符串。

    $string = "Hello 
          this string works fine"; 
    

    作爲空格在HTML中減少到一個字符長度,所以沒關係(很多)。


解決您的問題

var_dump($account)一旦值已被填充,同樣以$結果,做var_dump($results),看看是什麼價值,如果這些是class variablesarrays of data?下面


看到這兩個變量可能是調用同一個表的不同部分,我重寫了代碼:

$sql = "SELECT `id`, `first_name`, `email` FROM `clients` ORDER BY `id` DESC"; 
$result = $DB_CON_C->query($sql); 

/*** 
* $result is assumed to be an array, within which is a set of values such as: 
* $result[0]['id'] 
* $result[0]['first_name'] 
* $result[0]['email'] 
* $result[1]['id'], etc. 
***/ 

    foreach($result as $row) { 

     $stmt = "SELECT SUM(value) AS total_amount FROM `".$row['email']."`"; 
     $amount = $DB_CON_C->query($stmt); 
     /*** 
     * this is inconsistent, your data structure must be like $result as it 
     * uses the same methods, therefore you will need to enter the first 
     * "row" before getting the 'total_amount' value 
     ***/ 
     $sum = $amount[0]['total_amount']; 

     $data_row .= '<tr> 
         <td>' .$row['id'].'</td> 
         <td>' .$row['first_name'].'</td> 
         <td>' .$sum.'</td> 
         </tr>'; //you forgot your /tr !! 
     } 
     // Always clean up after foreach loops. 
     unset($row); 
    $data_row .= '</tbody> 
        </table>'; 
    echo $data_row; 
+0

我試過了你的代碼,並且在$ sum = $ amount [0] ['total_amount']行上收到錯誤「不能使用類型爲PDOStatement的對象作爲數組」。感謝您的建議,並根據您的意見改進我的代碼。我是新來的PHP和JavaScript,只有約3周的時間瞭解他們。 – MasterJoe