【问题标题】:Add the results from a PHP array into a SQL Select for each Result to be procesed将 PHP 数组中的结果添加到要处理的每个结果的 SQL 选择中
【发布时间】:2021-06-17 04:21:47
【问题描述】:

我是新手,所以我想知道我所问的是否可行。

我有一个返回 While 循环的 SQl Select 查询,我将结果(人名)转换为 php 数组。

在同一页面上的另一个 SQL 查询中,我需要使用 SQL SELECT 获取每个名称的地址。

我已经回显了 json_encode($name_arr) 并查看了所有三个名称,因此我知道我的名称数组在第一个 SQL 查询中有效。

我曾尝试使用 implode(),但我得到了一个名称的一个结果,而不是所有三个名称或什么都没有。

感谢您的帮助。

Array Result = 3 records found.
Array=
id Name
1   John
2   Mike
3   Jane
**Get names script**

$sql = "SELECT  names FROM directory WHERE  age = '33' ";
$result = $conn->query($sql);


if ($conn->query($sql) === FALSE) {
echo"error";
die();

} else if ($result->num_rows > 0) {

while($row = $result->fetch_array()) {

$name =  "".  $row['name']."";

$name_arr = array(  "name"  => $name);

}} 
**Get address script**

$sql = "SELECT * FROM address WHERE name IN ('".implode("','",$name_arr "') ";
$result = $conn->query($sql);

//Check if it failed to do above
if ($conn->query($sql) === FALSE) {

echo"error";
die();

} else if ($result->num_rows > 0) {

while($row = $result->fetch_array()) {


$street =    "".  $row['street']."";
$postcode =  "".  $row['postcode']."";
$city =      "".  $row['city']."";

  $address_arr[] = array(
   
  "street"    => $street,
  "postcode"  => $postcode,
  "city"      => $city);
  }
   
echo json_encode($address_arr);
exit();
} 

【问题讨论】:

  • 警告:使用mysqli 时,您应该使用parameterized queriesbind_param 将任何数据添加到您的查询中。 请勿使用字符串插值或连接来完成此操作,因为您创建了一个严重的SQL injection bug切勿$_POST$_GET任何类型的数据直接放入查询中,如果有人试图利用您的错误,这可能会非常有害。
  • 感谢您的发布或上线。我将使用 PDO 代码会改变。
  • 感谢您使用 PDO。在实践中要好得多。
  • 您可以通过在 SQL 中使用 JOIN 来通过单个查询完成所有这些操作。

标签: php mysql arrays


【解决方案1】:

您可以将其放在一个查询中以获取所有信息,例如:

SELECT  ad.*
FROM directory d 
LEFT JOIN address ad ON ad.name = d.name 
WHERE  d.age = '33' ";

【讨论】:

  • 感谢伯恩德·布芬! .我相信你的回答会让很多像我这样的新手受益
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-19
  • 2019-05-14
  • 2014-10-21
  • 1970-01-01
相关资源
最近更新 更多