Php 为什么我的数组值在输入if语句时不显示?

Php 为什么我的数组值在输入if语句时不显示?,php,Php,我将多个查询的值带到前端,并使用一个数组来实现。当我回显我的$hold['POAmount']值时在我的if语句之前它按预期返回253{“Sum”:10,“POAmount”:-10},但不要将其与我想要的输出混淆。但是在输入if语句后,返回页面的响应是{“Sum”:10,“POAmount”:-10}。我想也许使用fetch\u assoc()overfetch\u array()可以做些什么,但这没有什么作用。我得到的是: <?php include '../../inc/dbinfo

我将多个查询的值带到前端,并使用一个数组来实现。当我回显我的
$hold['POAmount']值时在我的if语句之前它按预期返回
253{“Sum”:10,“POAmount”:-10}
,但不要将其与我想要的输出混淆。但是在输入if语句后,返回页面的响应是
{“Sum”:10,“POAmount”:-10}
。我想也许使用
fetch\u assoc()
over
fetch\u array()
可以做些什么,但这没有什么作用。我得到的是:

<?php
include '../../inc/dbinfo.inc';

ini_set("log_errors", 1);
ini_set("error_log", "/tmp/php-error.log");
error_log( "#################################################     FT-SUM-INVOICES.PHP    #################################################" );

$inv = $_POST['inv'];
$status = $_POST['stat'];

//Get PO # From invoice id
$getPO = "SELECT VendorPOID1, VdrInvoiceAmount FROM tblVendorInvoices WHERE VENDORINVOICEID =?";
$exgetPO = $conn->prepare($getPO);
$exgetPO->bind_param("i", $inv);
$exgetPO->execute();
$obj = $exgetPO->get_result();
$hold = $obj->fetch_assoc();
$po = $hold['VendorPOID1'];
$currentInAmount = $hold['VdrInvoiceAmount'];

$cn = 3; //paid status

$getPOAmount = "SELECT POAmount FROM tblVendorPOs WHERE VENDORPOID = ?";
$poAmount = $conn->prepare($getPOAmount);
$poAmount->bind_param("i",$po);
$poAmount->execute();
$obj3 = $poAmount->get_result();
$hold = $obj3->fetch_assoc(); //Total PO Amount


if($status == 3){
  echo json_encode($hold['POAmount']);
  //Get Sum of invoices on po + current invoice
  $qr = "SELECT SUM(VdrInvoiceAmount) AS Sum FROM tblVendorInvoices WHERE VENDORPOID1 = ? AND VdrInvoiceStatusID = ?";
  $getSum = $conn->prepare($qr);
  $getSum->bind_param("ii", $po, $cn);
  $getSum->execute();
  $obj2 = $getSum->get_result();
  $hold = $obj2->fetch_assoc();

  $hold['Sum'] += $currentInAmount;

  $hold['POAmount'] -= $hold['Sum'];  //remaining balance

  if($hold['Sum'] == NULL){
    $hold['Sum'] = 0;
  }

  echo json_encode($hold);
}else{
 //Get Sum of invoices on po
 $qr = "SELECT SUM(VdrInvoiceAmount) AS Sum FROM tblVendorInvoices WHERE VENDORPOID1 = ? AND VdrInvoiceStatusID = ?";
  $getSum = $conn->prepare($qr);
  $getSum->bind_param("ii", $po, $cn);
  $getSum->execute();
  $obj2 = $getSum->get_result();
  $hold = $obj2->fetch_assoc();
  if($hold['Sum'] == NULL){
    $hold['Sum'] = 0;
  }

  $hold['POAmount'] -= $hold['Sum'];

  echo json_encode($hold);
}

?>

我上面描述的if语句是
if($status==3){
我没有从网页或PHP错误日志中收到任何错误

我的问题摘要:

$hold['POAmount']
在我从中减去sum时被认为是
null
。因此它被称为
-$hold['sum']
。然而它一开始就不应该是null。它在输入if语句时变为
null

当前输出:
{“Sum”:9,“POAmount”:-9}
所需的输出:
{“Sum”:9,“POAmount”:243}

这应该是可行的(尚未测试)。我所做的更改是,我已将if语句中SELECT查询的结果分配给另一个名为$hold2的变量,以便不会覆盖$hold中的$hold['POAmount']值

然后,我将$hold变量中的数组(它在if语句之前保存SELECT查询的结果)与$hold2中的数组(它在if语句中保存SELECT查询的结果)合并,生成了一个包含POAmount和Sum键的数组

如果这不起作用,请告诉我您会遇到什么错误,我很乐意提供帮助。:)



在if之前,$hold保存第二个select查询的结果,在if内部,您再次将第三个select查询的结果分配给$hold,因此我认为该值在那里丢失。请尝试重命名存储第三个select查询结果的变量(if内部的变量)输入$hold2或其他内容,看看是否有帮助。回答很好,谢谢你的帮助。我不知道数组合并是一个函数。
<?php
include '../../inc/dbinfo.inc';

ini_set("log_errors", 1);
ini_set("error_log", "/tmp/php-error.log");
error_log( "#################################################     FT-SUM-INVOICES.PHP    #################################################" );

$inv = $_POST['inv'];
$status = $_POST['stat'];

//Get PO # From invoice id
$getPO = "SELECT VendorPOID1, VdrInvoiceAmount FROM tblVendorInvoices WHERE VENDORINVOICEID =?";
$exgetPO = $conn->prepare($getPO);
$exgetPO->bind_param("i", $inv);
$exgetPO->execute();
$obj = $exgetPO->get_result();
$hold = $obj->fetch_assoc();
$po = $hold['VendorPOID1'];
$currentInAmount = $hold['VdrInvoiceAmount'];

$cn = 3; //paid status

$getPOAmount = "SELECT POAmount FROM tblVendorPOs WHERE VENDORPOID = ?";
$poAmount = $conn->prepare($getPOAmount);
$poAmount->bind_param("i",$po);
$poAmount->execute();
$obj3 = $poAmount->get_result();
$hold = $obj3->fetch_assoc(); //Total PO Amount


if($status == 3){
  echo json_encode($hold['POAmount']);
  //Get Sum of invoices on po + current invoice
  $qr = "SELECT SUM(VdrInvoiceAmount) AS Sum FROM tblVendorInvoices WHERE VENDORPOID1 = ? AND VdrInvoiceStatusID = ?";
  $getSum = $conn->prepare($qr);
  $getSum->bind_param("ii", $po, $cn);
  $getSum->execute();
  $obj2 = $getSum->get_result();
  $hold2 = $obj2->fetch_assoc();

  $hold = array_merge($hold, $hold2);

  $hold['Sum'] += $currentInAmount;

  $hold['POAmount'] -= $hold['Sum'];  //remaining balance

  if($hold['Sum'] == NULL){
    $hold['Sum'] = 0;
  }

  echo json_encode($hold);
}else{
 //Get Sum of invoices on po
 $qr = "SELECT SUM(VdrInvoiceAmount) AS Sum FROM tblVendorInvoices WHERE VENDORPOID1 = ? AND VdrInvoiceStatusID = ?";
  $getSum = $conn->prepare($qr);
  $getSum->bind_param("ii", $po, $cn);
  $getSum->execute();
  $obj2 = $getSum->get_result();
  $hold2 = $obj2->fetch_assoc();

  $hold = array_merge($hold, $hold2);

  if($hold['Sum'] == NULL){
    $hold['Sum'] = 0;
  }

  $hold['POAmount'] -= $hold['Sum'];

  echo json_encode($hold);
}

?>