我有一个数据库,其中有两个表:用户和命令。我正在尝试根据每个用户的用户 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”命令)。
有人知道我做错了什么吗?
谢谢你!
由于拼写错误,代码片段中的很多内容都被破坏了:
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);