【问题标题】:Mysql query to get field name and result as array key and array valueMysql查询以获取字段名称和结果作为数组键和数组值
【发布时间】:2014-02-12 10:24:15
【问题描述】:

我在下面有这段代码,我试图从查询中获取结果作为数组,其中包含作为表字段名称的数组键和作为字段结果的值。到目前为止,我有这个:

$query='select      
en_product_name,de_product_name,fr_product_name,ru_product_name    
from products where id="'.$pid.'"';    
$result=mysql_query($query) or die('Mysql Error:'.mysql_error().'<br /> Query:'.$query);    
$num_rows=mysql_num_rows($result);    
$row = mysql_fetch_array($result);    
$columns = mysql_num_fields($result);    
$fields =array();    
for($i = 0; $i < $columns; $i++) {     
echo $fields = mysql_field_name($result,$i).'<br />';
}    

这个 $fields 只返回字段名。我怎样才能得到结果: 数组( [en_product_name] => 新产品名称,[de_product_name] => 新产品名称)等。 感谢您的任何帮助和建议

【问题讨论】:

  • 试试$fields[key] = $value;
  • mysql_* 已被弃用。请改用 PDO (php.net/manual/en/book.pdo.php) 或 mysqli_*。否则会有安全问题。我会推荐 PDO。

标签: php mysql sql arrays


【解决方案1】:

试试这个

$query='select en_product_name,de_product_name,fr_product_name,ru_product_name    
    from products where id="'.$pid.'"';    
$result=mysql_query($query) or die('Mysql Error:'.mysql_error().'<br /> Query:'.$query);    
$num_rows=mysql_num_rows($result);    
$row = mysql_fetch_array($result);    
$columns = mysql_num_fields($result);    
$fields =array();    
for($i = 0; $i < $columns; $i++) {     
    $field = mysql_field_name($result,$i);
    $fields[$field] = $row[$field];
}  

print_r($fields);

注意:

mysql_* 已被弃用。请改用 PDO (php.net/manual/en/book.pdo.php) 或 mysqli_*。否则会有安全问题。

【讨论】:

  • jogesh_pi - 干得好!接受为正确!谢谢大家!!大家好!
  • @thecore7 很高兴为您提供帮助,要了解更多信息,请查看codepad.org/w0dGw78r,它更能解决您的问题。
【解决方案2】:

考虑将mysql_fetch_array 替换为mysql_fetch_assoc

来自mysql_fetch_assoc的文档:

Returns an associative array that corresponds to the fetched row and moves the internal data pointer ahead. mysql_fetch_assoc() is equivalent to calling mysql_fetch_array() with MYSQL_ASSOC for the optional second parameter. It only returns an associative array.

更新代码:

$query='select en_product_name,de_product_name,fr_product_name,ru_product_name    
    from products where id="'.$pid.'"';    
$result=mysql_query($query) or die('Mysql Error:'.mysql_error().'<br /> Query:'.$query);    
$num_rows=mysql_num_rows($result);    
$row = mysql_fetch_assoc($result);

【讨论】:

    【解决方案3】:

    所以你想访问 key => value,我使用 while 语句来清除答案。

    您可以使用这些函数和参数:

    while ($row = mysql_fetch_assoc($result)) {
        echo $row["userid"];
        echo $row["fullname"];
        echo $row["userstatus"];
    }
    

    或者

    $row = mysql_fetch_array($result, MYSQL_ASSOC);
    

    应该能解决你的问题。

    【讨论】:

      【解决方案4】:

      尽量避免使用 mysql_* 函数,因为它在 php 5.5 中已被弃用,并且将来会被删除。所以使用 mysqli_* 函数。像这样

      $con = mysqli_connect("localhost","username","pwd","dbname");
      $array = array();
      $equery1223 = "SHOW COLUMNS FROM products ";
      $eresults1223 = mysqli_query($con,$equery1223) or die(mysqli_error($con));
      $i=0;
      while($rows3 = mysqli_fetch_array($eresults1223))   
         {
            if($rows3['Field'] ="en_product_name" || $rows3['Field'] ="de_product_name" || $rows3['Field'] ="fr_product_name" || $rows3['Field'] ="ru_product_name" ) 
            {  $array[$i]=$rows3['Field'];$i++; }
         }
      $array2 = array();$i=0;
      $equery1224 = "select * FROM products ";
      $eresults1224 = mysqli_query($con,$equery1224) or die(mysqli_error($con));
      $i=0;
      while($rows4 = mysqli_fetch_array($eresults1224))   
         {
            $array2[$array[$i]]=$rows4[$array[$i]];$i++;
         }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-06-14
        • 1970-01-01
        • 2011-03-31
        • 2014-05-12
        • 1970-01-01
        • 1970-01-01
        • 2011-11-19
        相关资源
        最近更新 更多