Php 带有while循环输出的mysqli搜索只返回一条记录

Php 带有while循环输出的mysqli搜索只返回一条记录,php,mysqli,Php,Mysqli,只是学习了PHP并遇到了在搜索结果中输出多个值的问题 在一个数据库中有多个具有相同姓氏的事务,希望用户在“搜索”框中输入姓氏并获取所有事件,当前结构仅提供一个。感谢你的帮助。多谢各位 在函数中具有以下SQL查询: function search_transactions_ln($x){ global $connection; $query = "SELECT ALL * "; $query .= "FROM transactions "; $query .=

只是学习了PHP并遇到了在搜索结果中输出多个值的问题

在一个数据库中有多个具有相同姓氏的事务,希望用户在“搜索”框中输入姓氏并获取所有事件,当前结构仅提供一个。感谢你的帮助。多谢各位

在函数中具有以下SQL查询:

function search_transactions_ln($x){
    global $connection;

    $query  = "SELECT ALL * ";
    $query .= "FROM transactions ";
    $query .= "WHERE last_name = '{$x}' ";
    $query .= "LIMIT 50";
    $a3 = mysqli_query($connection, $query);
    confirm_query($a3);
    while ($a4 = mysqli_fetch_array ($a3)) {
        return $a4;
    }
}
使用以下代码检索结果,包括$\u POST:

if(isset($_POST['submit'])) {
    $last_name = $_POST["ln"];
    $found_transaction = search_transactions_ln($last_name);

    if ($found_transaction) {
        print $found_transaction["last_name"]; **==>>> this produces one result, want to see multiple**
    } else {
        // Failure
        $_SESSION ["message"] = "Last name not found.
    }                  
}

您只返回一个字符串,而不是所有结果

如果要打印所有这些文件,必须首先将它们收集到一个数组中,然后返回该数组

您可能需要更改您的功能:

function search_transactions_ln($x){
    global $connection;

    $query  = "SELECT ALL * ";
    $query .= "FROM transactions ";
    $query .= "WHERE last_name = '{$x}' ";
    $query .= "LIMIT 50";
    $a3 = mysqli_query($connection, $query);
    confirm_query($a3);

    $results = array();
    while ($a4 = mysqli_fetch_array ($a3)) {
      $results[] = $a4;
    }

    return $results;
}
while ($a4 = mysqli_fetch_array ($a3)) {
   return $a4;
}

您还必须更改打印以打印所有结果。

您只能从函数返回第一个结果:

function search_transactions_ln($x){
    global $connection;

    $query  = "SELECT ALL * ";
    $query .= "FROM transactions ";
    $query .= "WHERE last_name = '{$x}' ";
    $query .= "LIMIT 50";
    $a3 = mysqli_query($connection, $query);
    confirm_query($a3);

    $results = array();
    while ($a4 = mysqli_fetch_array ($a3)) {
      $results[] = $a4;
    }

    return $results;
}
while ($a4 = mysqli_fetch_array ($a3)) {
   return $a4;
}
将其更改为:

return $a3;
您还应该使用准备好的语句,而不是直接向查询中注入变量,因为您有sql注入问题

        function search_transactions_ln($x){
            global $connection;

            $query  = "SELECT ALL * ";
            $query .= "FROM transactions ";
            $query .= "WHERE last_name = '{$x}' ";
            $query .= "LIMIT 50";
            $a3 = mysqli_query($connection, $query);
            confirm_query($a3);
            $ans =array();
            while ($a4 = mysqli_fetch_array ($a3)) {
              $ans[] = $a4;
            }
           return $ans;
       }
在调用php文件中:

if(isset($_POST['submit'])) {

    $last_name = $_POST["ln"];

    $found_transaction_array = search_transactions_ln($last_name);

   foreach($found_transaction_array as $a){

      // do your task
    }

您确实应该避免使用全局变量。。这是个坏习惯