我有这个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;
答案 0 :(得分:2)
处理数据值的方式似乎存在一个根本上奇怪的问题。
接受您的第一个查询$result
,这将(显然取决于确切的$DB_CON_C
类方法)输出id
和first_name
然而在第二个电话中,$account
使用相同的方法,然后调用这些值就像它们是类变量$amount->total_amount
一样。
我怀疑这些语法中的一个是错误的,但是没有看到你的课我就不知道哪个。
您是否意识到您的两个SQL调用都返回整个数据库?
您是否意识到您在一个表中使用数据值(电子邮件地址)作为另一个表中的列名?这可以工作,但这不是最佳做法。
您不需要在新行上使用concaenator .
作为字符串。
$string = "Hello
this string works fine";
因为HTML中的空格减少到一个字符长度所以无所谓(很多)。
解决您的问题:
var_dump($account)
填充值后,与$ results相同,执行var_dump($results)
并查看值中的内容,如果这些是class variables
或arrays 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
字段。