【问题标题】:getting values for PHP array获取 PHP 数组的值
【发布时间】:2018-10-09 23:48:31
【问题描述】:

我在 php 中有以下查询,想从数组中提取值并希望在带有 foreach 循环的函数中使用它们。但是我从数组中得到的值是错误的。我无法弄清楚这里出了什么问题,因为我是 PHP 的新手。

$sql="SELECT * FROM `mlm_pending_transactions` WHERE member_id = $_SESSION[member_id] and cycle=$cycle_number and credited=0 and order_type='upgrade_commission_cash'";
$result=mysql_query($sql);                                                                  
while($data_set = mysql_fetch_array($result))
{                                                                            
   foreach($data_set as $cash_pendings)
   {
      echo $cash_pendings["member_id"]."</br>";
      echo $cash_pendings['tran_amount']."</br>";
      echo $cash_pendings['tran_particulars']."</br>";
      echo $cash_pendings['id'];
    }
}

【问题讨论】:

  • 帮助我们格式化您的代码
  • 另外,“结果错误”也没用。他们有什么问题? (显示 _actual SQL 查询运行,也许会显示一些结果)
  • mysql_fetch_array 每次调用都会返回一个数组。该数组是查询中的一行数据。因此,您要输出的字段位于 $data_set 数组中,而不是 $cash_pendings 数组中(这不是必需的)。
  • 请注意,您使用的 mysql_ 扩展名已从 PHP 版本 7 中删除。如果您使用的服务器运行 PHP 7.0 或更新您的代码将被破坏
  • 请查看此prnt.sc/jbqgd2 以了解我的实际问题。感谢您的宝贵时间。

标签: php mysql foreach while-loop


【解决方案1】:

你只需要 mysql_fetch_array() 返回的数组中的值

$sql="SELECT * FROM `mlm_pending_transactions` WHERE member_id = $_SESSION[member_id] and cycle=$cycle_number and credited=0 and order_type='upgrade_commission_cash'";
$result=mysql_query($sql);                                                                  
while($data_set = mysql_fetch_array($result))
{                                                                        
      echo $data_set["member_id"]."</br>";
      echo $data_set['tran_amount']."</br>";
      echo $data_set['tran_particulars']."</br>";
      echo $data_set['id'];
}

请注意,如果字段名称错误(区分大小写),则不会返回值。

如果不确定,可以使用 print_r($data_set) 检查返回的字段名称。

编辑 - 更改您的实际错误。

绝对最小值。注意没有经过测试,所以可能有些错别字。

<?php

$sql="SELECT * 
    FROM `mlm_pending_transactions` 
    WHERE member_id = $_SESSION[member_id] 
    AND cycle = $cycle_number 
    AND credited = 0 
    AND order_type = 'upgrade_commission_cash'";
$result = mysql_query($sql);   

while($data_set = mysql_fetch_array($result))
{                                                                        
      echo $data_set["member_id"]."</br>";
      echo $data_set['tran_amount']."</br>";
      echo $data_set['tran_particulars']."</br>";
      echo $data_set['id'];

    $date = date("m/d/Y");
    $time = strtotime("now");

    $add_cash = $affiliate->add_fin_tran($data_set["member_id"],
                                $data_set["tran_amount"],
                                0,
                                $data_set["tran_particulars"],
                                "upgrade_commision_cash",
                                1);

    $sql2 = "UPDATE mlm_pending_transactions
        SET credit = 1,
        credited_date = '$date',
        credited_time = '$time'
        WHERE id = ".$data_set["id"];

    $result2 = mysql_query($sql2);

}

?>

但是,正如其他人所说,您正在使用已弃用的 mysql_* 函数。此外,您对 SQL 注入的保护为零。

您应该使用一种较新的方法来访问数据库。通常是 mysqli_* 函数或基于 pdo 的函数。请注意,要使用这些,您还需要切换功能以连接到数据库(连接到匹配的数据库)。

例如,使用 mysqli_ 函数(你也可以使用面向对象的语法):-

<?php

$sql = "SELECT * 
    FROM `mlm_pending_transactions` 
    WHERE member_id = ?
    AND cycle = ?
    AND credited = ? 
    AND order_type = ?";
$statement = mysqli_prepare($db_connection, $sql); 
mysqli_stmt_bind_param($statement, 'iiis', $_SESSION['member_id'], $cycle_number, 0, 'upgrade_commission_cash');
mysqli_execute($statement);   
$result = mysqli_get_result($statement);   

while($data_set = mysqli_fetch_array($result, MYSQLI_ASSOC))
{                                                                        
      echo $data_set["member_id"]."</br>";
      echo $data_set['tran_amount']."</br>";
      echo $data_set['tran_particulars']."</br>";
      echo $data_set['id'];

    $date = date("m/d/Y");
    $time = strtotime("now");

    $add_cash = $affiliate->add_fin_tran($data_set["member_id"],
                                $data_set["tran_amount"],
                                0,
                                $data_set["tran_particulars"],
                                "upgrade_commision_cash",
                                1);

    $sql2 = "UPDATE mlm_pending_transactions
        SET credit = ?,
        credited_date = ?,
        credited_time = ?
        WHERE id = ?";

    $statement2 = mysqli_prepare($db_connection, $sql2);    
    mysqli_stmt_bind_param($statement2, 'issi', 1, $date, $time, $data_set["id"]);
    $result2 = mysqli_execute($statement2);   


}

?>

使用面向对象的语法:-

<?php

$sql = "SELECT * 
    FROM `mlm_pending_transactions` 
    WHERE member_id = ?
    AND cycle = ?
    AND credited = ? 
    AND order_type = ?";
$statement = $db_connection->prepare($sql); 
$statement->bind_param('iiis', $_SESSION['member_id'], $cycle_number, 0, 'upgrade_commission_cash');
$statement->execute();   
$result = $statement->get_result();   

while($data_set = $result->fetch_array(MYSQLI_ASSOC))
{                                                                        
      echo $data_set["member_id"]."</br>";
      echo $data_set['tran_amount']."</br>";
      echo $data_set['tran_particulars']."</br>";
      echo $data_set['id'];

    $date = date("m/d/Y");
    $time = strtotime("now");

    $add_cash = $affiliate->add_fin_tran($data_set["member_id"],
                                $data_set["tran_amount"],
                                0,
                                $data_set["tran_particulars"],
                                "upgrade_commision_cash",
                                1);

    $sql2 = "UPDATE mlm_pending_transactions
        SET credit = ?,
        credited_date = ?,
        credited_time = ?
        WHERE id = ?";

    $statement2 = $db_connection->mysqli_prepare($sql2);    
    $statement2->bind_param('issi', 1, $date, $time, $data_set["id"]);
    $result2 = $statement2->execute();   


}

?>

【讨论】:

  • 请将此prntscr.com/jbqgd2 复制并粘贴到您的浏览器中以查看我的问题。感谢您的回复。
  • foreach 循环不是必需的。它可以直接进入while循环。但是您也在使用 $result = mysql_query($sql);在 while 循环中,这将覆盖您正在循环的结果集。因此永远不会达到第二条记录。
  • 你能告诉我如何达到我的结果吗?
  • 非常感谢。启动
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-10
相关资源
最近更新 更多