gpt4 book ai didi

PHP - 进阶 MYSQL 同时

转载 作者:行者123 更新时间:2023-11-29 11:01:15 32 4
gpt4 key购买 nike

我有下一种情况。

  1. 从 PHP 表单中我只获得公司 ID
  2. 我需要使用该公司 ID 排列所有用户名
  3. 我需要数组并将具有该用户名的所有日志导出到表

我的问题是,当我尝试下一步时:

$sql2 = "SELECT vpnuserreg FROM users WHERE company='$company'";
$result2 = $database->query($sql2);
while ($row2 = $database->fetch_array($result2)){
$username = $row2['vpnuserreg'];
$sql = "SELECT * FROM logs WHERE username='$username' ORDER BY radacctid DESC";
$result = $database->query($sql);
$row=$database->fetch_array($result);
}

问题是:在 $sql2 查询中,我只有 3 个用户,并且我在 $sql 查询中的登录只会重复 3 次。但我有超过 3 个该用户的日志。我怎样才能进行sql查询,让我的日志导出表中只有3个用户名的所有行?

最佳答案

不要运行两个查询,而是执行一个简单的JOIN。这意味着您可以在单个查询中完成所有操作。

$sql = "SELECT l.* 
FROM users u
JOIN logs l ON u.vpnuserreg=l.username
WHERE u.company='$company'
ORDER BY l.radacctid DESC";
$result = $database->query($sql);

while ($row = $database->fetch_array($result)){
/* Do whatever here */
}
<小时/>

需要注意的是,这段代码很容易受到 SQL 注入(inject)的攻击,因为您直接在查询中使用变量。我建议您开始使用带有占位符的准备好的语句,如下所示

$sql = "SELECT l.* 
FROM users u
JOIN logs l ON u.vpnuserreg=l.username
WHERE u.company=?
ORDER BY l.radacctid DESC";
$stmt = $database->prepare($sql);
$stmt->bind_param("s", $company);
$stmt->execute();
$result = $stmt->get_result();
$stmt->close();

while ($row = $database->fetch_array($result)){
/* Do whatever here */
}

NOTE The above code is using get_result() and requires the mysqlnd driver to be installed. Otherwise, you have to use mysqli_stmt::bind_result() and mysqli_stmt::fetch() instead of mysqli_stmt::get_result()!

关于PHP - 进阶 MYSQL 同时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42206437/

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