在 PHP foreach 循环中选择 SQL 查询

问题描述 投票:0回答:1

我有一个数据库,其中有两个表:用户和命令。我正在尝试根据每个用户的用户 ID 在网页上打印不同的购买数组。

我有这个代码:

try
{
$mysqlClient = new PDO(
'mysql:host=$host;dbname=FirstDB;charset=utf8',
'$user',
'$pwd'
);
}
catch (Excetion $e)
{
die(Error : ' . $e->getMessage());
}


$UsersSelectQuery = 'SELECT * FROM Users';
$UsersStmt = $mysqlClient->prepare($UsersSelectQuery);
$UsersStmt->execute();
$UsersRows = array($UsersStmt->fetchAll());

foreach ($UsersRows as $Row)
{
$sql = 'SELECT * FROM Commands WHERE UserID=?';
$stmt = $mysqlClient->prepare($sql);
$stmt->bind_param("i", $Row);
$stmt->execute();
$result = $stmt->get_result();
$response = $result->fetchAll();

echo '<pre>'; print_r($response); echo '</pre>';

}

此代码会生成空白页面,并且我的“$response”变量为空。我想我在 SQL“select”查询中包含“foreach”自动 PHP 变量($Row)的方式是错误的。

我已经尝试了在网上找到的所有方法来连接 SQL 查询中的 PHP 变量(带点、单引号和双引号、准备好的语句、占位符、参数...),但每次都是“$response”变量是空的。

如果我设置一个固定值而不是“$Row”变量(例如“1”),则数组变量确实会在网页上显示数据(使用“print_r”命令)。

有人知道我做错了什么吗?

谢谢你!

php mysql select foreach
1个回答
0
投票

由于拼写错误,代码片段中的很多内容都被破坏了:

catch (Excetion $e)

应该是:

catch (Exception $e)

die(Error : ' . $e->getMessage());

应该是:

die('Error : ' . $e->getMessage());

我强烈建议您启用错误日志记录

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

这样你就可以看到所有的错误

注意这也应该改变:

$stmt->bind_param("i", $Row);
$stmt->bindParam("1", $Row);

而且 $Row 还包含整个用户记录,而您只需要 ID,应该类似于:

$user_id = $Row[0]['id'];
$stmt->bindParam("1", $user_id);
© www.soinside.com 2019 - 2024. All rights reserved.