【问题标题】:Save in a single row the result of variable PHP (while/loop) from mysql query将来自 mysql 查询的变量 PHP(while/loop)的结果保存在一行中
【发布时间】:2019-05-31 05:39:28
【问题描述】:

我查询时,结果由多个值组成(WHILE/LOOP),例如:

   $query_sku = mysqli_query($connect, "SELECT t.column_name
        FROM skus AS s
            INNER JOIN table AS t ON t.column_id = s.column_id
                WHERE s.id_sku = '{$id_sku}'");
WHILE($reg = mysqli_fetch_object($query_sku )){
  $variable = $reg->column_name;
echo "<br/">;
}

这个查询/while的结果是:

BATERIA  
PARA
CÂMERA
CANON
PowerShot ELPH 330 HS

当我将值保存在数据库中时,这些值保存在不同的行中。

但是,我希望你保存在一行中:

BATERIA PARA CÂMERA CANON PowerShot ELPH 330 HS

我该怎么做?谢谢!

我已经尝试过这样做:

while($reg = mysqli_fetch_object($query_sku ))
    $variable .= " ".$reg->column_name;

但是,结果是重复相同的值:

PowerShot ELPH 330 HS BATTERY (RECHARGEABLE)PowerShot ELPH 330 HS BATTERY (RECHARGEABLE) CAMERAPowerShot ELPH 330 HS BATTERY (RECHARGEABLE) CAMERA CANON

【问题讨论】:

  • 警告:使用mysqli 时,您应该使用parameterized queriesbind_param 将用户数据添加到您的查询中。 请勿使用字符串插值或连接来完成此操作,因为您创建了一个严重的SQL injection bug切勿$_POST$_GET任何用户数据直接放入查询中,如果有人试图利用您的错误,这可能会非常有害。
  • 注意:mysqli 的面向对象接口明显不那么冗长,使代码更易于阅读和审核,并且不容易与过时的mysql_query 接口混淆。在您对程序风格投入过多之前,值得转换一下。示例:$db = new mysqli(…)$db-&gt;prepare("…") 程序接口是 PHP 4 时代引入的 mysqli API 的产物,不应在新代码中使用。
  • 互联网上的 90 年代糟糕的互联网教程仍然有不好的回味.. 关于 stackoverflow 的 10 个问题中有 9 个问题带有 PHP 或 MySQL 标签,并且正在查询数据库的位置包含某种关闭 @ 987654324@
  • @RaymondNijland 由于宣传和提高认识,这只是 9/10。之前是 10 月 10 日。

标签: php mysql variables while-loop


【解决方案1】:

你可以使用选择直接得到结果

SELECT group_concat( t.column_name  SEPARATOR ' ')
FROM skus AS s
INNER JOIN table AS t ON t.column_id = s.column_id
WHERE s.id_sku = '{$id_sku}'

对于插入,您可以使用插入/选择

insert into my_table  (my_col)
SELECT group_concat( t.column_name  SEPARATOR ' ')
FROM skus AS s
INNER JOIN table AS t ON t.column_id = s.column_id
WHERE s.id_sku = '{$id_sku}'

无论如何你应该看一下绑定参数并避免在sql中使用php var(你有sqlinjectio的风险)

【讨论】:

    【解决方案2】:

    抛开代码的 SQL 注入漏洞。您可以将结果展平为一列,如下所示:

    $variables = [];
    while($reg = mysqli_fetch_object($query_sku)){
      $variables[] = $reg->column_name;
    }
    
    $oneColumn = implode(' ', $variables);
    

    【讨论】:

    • 工作正常!谢谢你的建议! ;)
    猜你喜欢
    • 1970-01-01
    • 2021-03-01
    • 2021-10-25
    • 2016-12-25
    • 2020-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-14
    相关资源
    最近更新 更多