php - 如何从查询中设置对象属性?
问题描述
我正在尝试将三个值返回到我的前端。我的问题是(或者至少我认为)是它作为布尔值返回。这是我的代码:
<?php
require "../../inc/dbinfo.inc";
ini_set("log_errors", 1);
ini_set("error_log", "/tmp/php-error.log");
error_log( "################################################# FT-VENDOR-INVOICE-FILLOUT.PHP #################################################" );
$num = $_POST['num'];
$sql = $conn->prepare("SELECT COUNT(*) AS sq FROM tblVendorInvoices WHERE VendorPOID1 = ?");
$sql->bind_param("i",$num);
$sql->execute();
$hold = $sql->get_result();
$obj->sq = $hold->fetch_object();
$obj->sq = round($obj->sq,2);
$sql2 = $conn->prepare("SELECT POAmount AS poam FROM tblVendorPOs WHERE VENDORPOID = ?");
$sql2->bind_param("d",$num);
$sql2->execute();
$hold2 = $sql2->get_result();
$obj->poam = $hold2->fetch_object();
$obj->poam = round($obj->poam,2);
$sql3 = $conn->prepare("SELECT SUM(VdrInvoiceAmount) AS itd FROM tblVendorInvoices WHERE VendorPOID1 = ?");
$sql3->bind_param("d",$num);
$sql3->execute();
$hold3 = $sql3->get_result();
$obj->itd = $hold3->fetch_object();
$obj->itd = round($obj->itd,2);
echo json_encode($obj);
exit();
?>
我的错误日志报告:
[01-Aug-2018 09:15:49 America/Toronto] ################################################# FT-VENDOR-INVOICE-FILLOUT.PHP #################################################
[01-Aug-2018 09:15:49 America/Toronto] PHP Warning: Creating default object from empty value in /var/www/html/fetch/ft-vendor-invoice-fillout.php on line 14
[01-Aug-2018 09:15:49 America/Toronto] PHP Notice: Object of class stdClass could not be converted to int in /var/www/html/fetch/ft-vendor-invoice-fillout.php on line 15
[01-Aug-2018 09:15:49 America/Toronto] PHP Notice: Object of class stdClass could not be converted to int in /var/www/html/fetch/ft-vendor-invoice-fillout.php on line 22
[01-Aug-2018 09:15:49 America/Toronto] PHP Notice: Object of class stdClass could not be converted to int in /var/www/html/fetch/ft-vendor-invoice-fillout.php on line 29
当前响应:{"sq":1,"poam":1,"itd":1}
期望的响应是这种精确的格式,但数字是错误的。它们是查询值,所以很抱歉我不能给出准确的输出。我尝试过对其中一些行进行类型转换,但没有成功。我真的不明白为什么我的日志中出现这个 int 转换错误,所以对此的解释会很神奇。第一个值应始终为 in,第二个和第三个值应为 float。
另外,我无法理解大多数 PHP 文档的解释,所以请不要参考那些。
解决方案
你误解了什么fetch_object()
。它返回一个对象,而不是单个字段。您需要首先引用该字段,然后将其分配给您的对象。
您还可以将两个查询合并为一个,因此下面是为您重构的代码库:
<?php
require '../../inc/dbinfo.inc';
// Retrieve the POST var:
$num = $_POST['num'];
// Create our blank object:
$obj = new stdClass();
// Combines query 1 and 3:
$sql = $conn->prepare('SELECT COUNT(*) AS sq, SUM(VdrInvoiceAmount) AS itd FROM tblVendorInvoices WHERE VendorPOID1 = ?');
$sql->bind_param('i', $num);
$sql->execute();
$hold = $sql->get_result();
$res = $hold->fetch_object();
$obj->sq = round( $res->sq, 2 );
$obj->itd = round( $res->itd, 2 );
$sql2 = $conn->prepare('SELECT POAmount AS poam FROM tblVendorPOs WHERE VENDORPOID = ?');
$sql2->bind_param('d', $num);
$sql2->execute();
$hold = $sql2->get_result();
$res = $hold->fetch_object();
$obj->pam = round( $res->poam, 2 );
// May also be handy to output JSON headers:
header('Content-type: application/json');
echo json_encode($obj);
exit();
推荐阅读
- regex - 无法创建正确的模式
- google-cloud-platform - 授权启用 Project media-244309 服务时出错
- ruby - 在 Ruby 中为数字添加百分比
- css - 失败的@import url() 请求是否会阻止应用文件中的其余 CSS
- bash - 如何使用 procmail 拆分单个邮件?
- java - JDBC 过滤器阻止所有 Servlet 和 URL 模式,但不直接访问文件本身
- jquery - jquery选择标题和输出做div
- python - python装饰器if语句
- java - com.samsung.android.content.clipboard.SemClipboardManager.registerClipboardEventListener + 708 (SemClipboardManager.java:708)
- c# - 如果它们是回文,如何检查区分大小写的单词