【问题标题】:Show each row colums information php and sql显示每一行列信息php和sql
【发布时间】:2019-10-14 03:01:27
【问题描述】:

我想打印所有行的自定义列的值,我有一个 sql 开发人员文件,我的意思是我想打印每行的一些列,例如,如果我的表名为 client 并且有名称,子名称和电子邮件我想打印每个客户名称、子名称和电子邮件我已经找到了如何用 mysql 制作它,但我想用 php 和 sql 开发人员制作它。

我显示的代码只显示了第一个用户名,而不显示其他用户的其余名称和其他列。

<?php
function clientes($conexion) {
    $consulta = "SELECT NOMBRE FROM CLIENTE";
    $stmt = $conexion -> prepare($consulta);
    $stmt -> execute();
    return $stmt -> fetchColumn();
}

echo clientes($conexion);
?>

【问题讨论】:

  • “但我想用php和sql developer” - 什么是“sql developer”?

标签: php sql oracle oracle-sqldeveloper


【解决方案1】:

你只得到一列,因为你明确地只要求一列(通过使用fetchColumn()事实上你只告诉 SQL 返回一列。

更改您的查询:

// Replace column1 etc to the real column names
SELECT column1, column2, column3 FROM CLIENTE

然后,不要使用fetchColumn()(用于获取 one 列),而是使用:

return $stmt->fetchAll(PDO::FETCH_ASSOC);

你应该得到一个包含所有三列的关联数组(每行一个)的数组。

但是,您还有另一个问题:

echo clientes($conexion);

由于您现在要返回一个数组,因此不能直接回显它。如果这样做,您将收到有关“数组到字符串转换”的警告。您需要遍历数组并根据需要输出数据:

$data = clientes($conexion);

// Again, change the column names
foreach ($data as $row) {
    echo $row['column1'];
    echo $row['column2'];
    echo $row['column3'];
}

这将输出所有数据。不过,您可以决定布局。

【讨论】:

    【解决方案2】:

    我想打印我找到的每个客户名称、子名称和电子邮件

    然后你应该使用 fetchall() 这将获取所有结果作为一个数组然后遍历数组并打印数组的每个元素

    function clientes($conexion) {
        $stmt = $conexion ->query("SELECT name,subname,email FROM CLIENTE")->fetchall();
    
      foreach($stmt as $row){
    
        echo "Client Name : ".$row['name']."<br>";
        echo "Client subname : ".$row['subname']."<br>";
        echo "Client email : ".$row['email']."<br>";
      }
    }
    
    clientes($conexion);
    ?>
    

    【讨论】:

    • @JoseLuis - 我建议使用一个函数来获取数据并将其作为数组返回。让函数做多件事从来都不是一件好事,因为重用它们要困难得多。例如:如果你想在其他页面上以不同的方式输出相同的数据,你需要为它创建一个新的函数。如果它只是返回一个数组,你可以重复使用相同的函数,只是在不同的页面上以不同的方式输出。
    【解决方案3】:

    用于获取所有列

    您需要以不同的方式处理您的 SQL 查询,以便它可能正常工作。目前您只是在寻找字段nombre。尝试将其更改为:

      $consulta = "SELECT * FROM CLIENTE";
    

    您使用星号调用表cliente 中的所有字段。为了性能,您应该只调用您需要的字段。这看起来像这样:

      $consulta = "SELECT nombre,dni,sexo FROM CLIENTE";
    

    用于获取所有行

    目前您只需在此处处理一行。您需要将代码更改为

    return $stmt ->fetchAll();
    

    【讨论】:

    • 或者更好的是,只需添加您想要获取的列。如果该表有很多包含大量数据的列,则使用* 将付出代价。
    • 当我输入 * 时,它只显示用户标识 (DNI)
    • 但问题是我只想显示所有行信息而代码只显示第一行
    • @JoseLuis - 由于您使用的是-&gt;fetchColumn(),因此您只会从第一列中获得一个值。正如手册中所说:“从结果集的下一行返回单列”
    • @JoseLuis 尝试使用 ->fetchAll()
    猜你喜欢
    • 1970-01-01
    • 2020-10-12
    • 2013-10-11
    • 1970-01-01
    • 1970-01-01
    • 2016-10-03
    • 2013-08-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多