connect_-6ren">
gpt4 book ai didi

php - 在一个 JSON 中有两个查询?

转载 作者:太空宇宙 更新时间:2023-11-03 11:32:22 24 4
gpt4 key购买 nike

我正在尝试从两个表中选择所有内容并通过 JSON 显示它们。这是我的尝试:

 <?php
// Create connection
$conn = new mysqli("localhost", "root", "****", "user");

if ($conn->connect_error) {

die("Connection failed: " . $conn->connect_error);
}
// Getting the received JSON into $json variable.
$json = file_get_contents('php://input');

// decoding the received JSON and store into $obj variable.
$obj = json_decode($json,true);

// Populate Username from JSON $obj array and store into $usnername.
$username = $_GET['username'];

$sql = "SELECT * FROM users WHERE username = '$username'";
$usql = "SELECT * FROM user_images WHERE username = '$username'";

$result = $conn->query($sql, $usql);

if ($result->num_rows >0) {


while($row[] = $result->fetch_assoc()) {

$tem = $row;

$json = json_encode($tem);


}

} else {
echo "No Results Found.";
}
echo $json;
$conn->close();
?>

我不太确定这是否是完成我的任务的正确方法,但我查看了其他问题,没有一个与我的格式相同。另外,我知道这很容易受到 SQL 注入(inject)的攻击,这只是为了举例。

用户表:

-id -用户名-个人资料图片

1 账单图片.png

2 莎莉猫.png

user_images 表:

-id -用户名-posts

1 份食品

2 比尔体育

3 莎莉咖啡

最佳答案

我知道你在你的问题中提到了它,但它值得重复——这很容易受到 SQL 注入(inject)的攻击,因为你直接在你的 SQL 查询中引用来自 $_GET 数组的用户输入,而没有先清理它或者,更好的是,使用准备好的语句。

$result = $conn->query($sql, $usql);
mysqli::query函数采用单个查询和一个可选的 MYSQLI_STORE_RESULT 参数,您通过传递第二个 SQL 语句 $usql 错误地指定了该参数 - 因此这将不起作用。

相反,您应该在同一查询中对两个表执行JOIN。因此,组合您的查询看起来像这样:

$sql = "SELECT * FROM users 
LEFT JOIN user_images ON user_images.username = user.username
WHERE username = '$username'";

或者,作为准备好的语句:

$prepared_statement = $conn->prepare("SELECT * FROM users LEFT JOIN user_images ON user_images.username = user.username WHERE username = ?");
$prepared_statement->bind_param("s", $username);
$result = $prepared_statement->execute();

这将合并两个表中包含的信息,以便您可以在一个循环中提取相关信息。此外,您可能会考虑仅收集响应的相关信息,这样您就不会通过 JSON 发回整个用户对象。

编辑 在考虑提供的新信息后,最好执行以下操作:

$sql = "SELECT * FROM users  WHERE username = '$username'";
$usql = "SELECT * FROM user_images WHERE username = '$username'";

$users_result = $conn->query($sql);

if ($users_result->num_rows > 0) {
while($user = $users_result->fetch_assoc()) {
$posts_array = array();
$posts_result = $conn->query($usql);
if ($posts_result->num_rows > 0) {
while($post = $posts_result->fetch_assoc()) {
$posts_array[] = array(
"id" => $post['id'],
"post" => $post['post']
);
}
}
$response = array(
"id" => $user['id'],
"username" => $user['username'],
"profilepic" => $user['profilepic'],
"posts" => $posts_array
);
$json = json_encode($response);
echo $json;
}
} else {
echo "No Results Found.";
}
$conn->close();

关于php - 在一个 JSON 中有两个查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48736243/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com