使用MySqli获取一条记录的列名和字段值

时间:2016-02-04 21:13:35

标签: php mysqli

我正在尝试从一个表中获取一个记录的列名和字段值。如果列名称为“卖家”且字段值为“Bob”,则所需的输出将为:卖家Bob

输出实际上将用于这样的脚本: $字段[ '卖家'] - >的setValue($卖方);

其中'卖家'是列名,而卖家是字段值。

表格中有数十列。

下面的脚本只输出列名 - 而不是字段值。

感谢任何帮助。

$sql = "SELECT * FROM tbl_pdfform WHERE trans_id = '$trans_id' ";
$sql_result = mysqli_query($db, $sql);

for($i = 0; $i < mysqli_num_fields($sql_result); $i++) {
    $field_info = mysqli_fetch_field($sql_result);
    $col = "{$field_info->name}";
    echo $col . ' ';
         while ($row = mysqli_fetch_array($sql_result)) {
            $data = $row[$col];
            echo $data."<br>";
    }
}

3 个答案:

答案 0 :(得分:4)

不确定我是否完全理解您尝试做的事情,但是使用mysqli_fetch_assoc()foreach循环会给出您想要的结果吗?

$sql = "SELECT * FROM tbl_pdfform WHERE trans_id = '$trans_id' ";
$sql_result = mysqli_query($db, $sql);

   $row = mysqli_fetch_assoc($sql_result);
   foreach($row as $column => $value) {
          echo $column . " " . $value;
   }

答案 1 :(得分:1)

您应该只调用mysqli_fetch_array()一次,而不是每列的循环。因为每次调用它时,它都会移动到下一行结果,它不会重新获取旧行。由于您只有一行结果,因此重复调用只返回false

$row = mysqli_fetch_array($sql_result);
for($i = 0; $i < mysqli_num_fields($sql_result); $i++) {
    $field_info = mysqli_fetch_field($sql_result);
    $col = "{$field_info->name}";
    echo $col . ' ' . $row[$col];
}

但是,确实没有必要使用mysqli_fetch_field()来获取字段名称。由于$row是关联数组,因此字段名称只是数组的键。但是,使用mysqli_fetch_assoc()会更好,因为mysqli_fetch_array()返回一个包含命名和编号元素的数组; mysqli_fetch_assoc()只返回指定的元素。所以WheatBeak的答案就是大多数人会做你想做的事。

答案 2 :(得分:0)

我认为插值存在问题。

public class RevisedLeapYear {
    public static void main(String args[])
    throws java.io.IOException {

    char restartChoice = 'y';
    int readCh, year=0, i;
    boolean isLeapYear;

    while(restartChoice == 'y' || restartChoice == 'Y'){
        System.out.print("Enter target year: ");
        for(i = 0; i < 4; i++)//start for
        {
            readCh = (int)System.in.read();
            switch(i) //start switch
            {//converts in to 4 digits
                case 0: year = (int)((readCh - 48) * 1000); break;
                case 1: year = year + (int) ((readCh - 48) * 100); break;
                case 2: year = year + (int) ((readCh - 48) * 10); break;
                case 3: year = year + (int) (readCh - 48);
            }//end switch
    }//end for
        isLeapYear = ((year % 4 == 0) && (year % 100 != 0) || (year % 400 == 0));
                if(isLeapYear == true && year > 1581){
                System.out.println(year + " is a Leap Year! What a time to be alive! \nPress Enter to continue.");
            }
                else if(isLeapYear == false && year > 1581){
                System.out.println(year + " is not a Leap Year... how unfortunate. \nPress Enter to continue.");
            }
            else{
                System.out.println("There are no leap years before 1582! \nPress Enter to continue.");
            }
    readCh = System.in.read(); // Clear the carriage return in the buffer
    readCh = System.in.read(); // Clear the linefeed in the buffer

    System.out.print("Reset program? y/n \n");
    restartChoice=(char)System.in.read();
    year=(int)System.in.read();

    }              
}
}

在撇号之间使用变量会在SQL查询中发送字符串“$ trans_id”,而不是$ trans_id包含的值。试试这个:

$sql = "SELECT * FROM tbl_pdfform WHERE trans_id = '$trans_id' ";