php foreach循环SQL表名查询

时间:2017-05-10 00:18:26

标签: php sql

我有这个PHP代码来执行查询foreach循环遍历变量$ rowA中的表名但我得到了“数组到字符串转换”错误。有谁知道为什么?我们可以这样做一个查询循环吗?

$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;

2 个答案:

答案 0 :(得分:2)

处理数据值的方式似乎存在一个根本上奇怪的问题。

接受您的第一个查询$result,这将(显然取决于确切的$DB_CON_C类方法)输出idfirst_name

然而在第二个电话中,$account使用相同的方法,然后调用这些值就像它们是类变量$amount->total_amount一样。

我怀疑这些语法中的一个是错误的,但是没有看到你的课我就不知道哪个。

  • 您是否意识到您的两个SQL调用都返回整个数据库?

  • 您是否意识到您在一个表中使用数据值(电子邮件地址)作为另一个表中的列名?这可以工作,但这不是最佳做法。

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

     $string = "Hello
                this string works fine";
    

    因为HTML中的空格减少到一个字符长度所以无所谓(很多)。

解决您的问题

var_dump($account)填充值后,与$ results相同,执行var_dump($results)并查看值中的内容,如果这些是class variablesarrays of data?< / p>

看到你的变量都在调用同一个表的不同部分,我在下面重写了你的代码:

$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;

答案 1 :(得分:1)

您尝试将数据库行解析为字符串,即使它只包含一个字符串。

更改以下行

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

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

$rowA是一个数据库行,包含数据库中的email字段。