Php MySql查询:难以记录金额包含小数的字段
添加-解决:我的代码从一开始就很好,问题是使用的货币,如果是美元,它将按原样工作。我的测试是用CAD货币完成的,为此,amount_gross从Paypal返回了一个空值文档,必须使用mc_gross-适用于所有货币 因此,适用于所有货币的正确代码为:Php MySql查询:难以记录金额包含小数的字段,php,mysql,paypal,Php,Mysql,Paypal,添加-解决:我的代码从一开始就很好,问题是使用的货币,如果是美元,它将按原样工作。我的测试是用CAD货币完成的,为此,amount_gross从Paypal返回了一个空值文档,必须使用mc_gross-适用于所有货币 因此,适用于所有货币的正确代码为: $item_name = $_POST['item_name']; $item_number = $_POST['item_number']; $payment_status = $_POST['payment_status']; $pay
$item_name = $_POST['item_name'];
$item_number = $_POST['item_number'];
$payment_status = $_POST['payment_status'];
$payment_amt = $_POST['mc_gross']; // instead of payment_gross !!!
$txn_id = $_POST['txn_id'];
$payer_email = $_POST['payer_email'];
$custom = $_POST['custom'];
if ($payment_status == 'Completed') { ....
谢谢大家的帮助
--添加的结束--
在我的项目中,我有一个最后的问题,Paypal集成:在Ipn发送完成后,我想将数据保存到MySQL,但我在payment\u amt字段上有一个问题
如果金额没有小数点ex:100,则有效,如果小数点ex:100.34,则不记录付款金额。记录所有其他字段。这与我必须添加的参数有关,尽管我很难理解逻辑,但我不是程序员。谢谢你的帮助
mysql_query("INSERT INTO al_paypal
(item_name,item_number,payment_status,payment_amt,txn_id,payer_email,custom,commerce_id)
VALUES (
'". $item_name ."',
'". $item_number ."',
'". $payment_status ."',
'". $payment_amt ."', // does not record if amount has decimals
'". $txn_id ."',
'". $payer_email ."',
'". $custom ."',
'". $commerce_id ."'
)");
}
$item_name = $_POST['item_name']; // restaurant
$item_number = $_POST['item_number']; // my ordernymber
$payment_status = $_POST['payment_status']; //should be Completed
$payment_amt = $_POST['payment_gross'];
$txn_id = $_POST['txn_id']; // Paypal transaction number
$payer_email = $_POST['payer_email'];
$custom = $_POST['custom'];
if ($payment_status == 'Completed') { ....
这里有更多的代码
下:
$payment_amt = "33,56"; // if I use this it records properly
$payment_amt = $_POST['payment_gross']; // if I use this it records 0
// if I use (as suggested) ". $payment_amt .", instead of: '". $payment_amt ."', Nothing records at all.
$payment_amt = preg_replace("/,/", '.', $payment_amt);
$payment_amt = number_format($payment_amt, 2, '.', '');
很难理解什么是错的。无法使用错误,因为它是IPN,它在Paypal发送内容时运行
我查了一下
$payment_amt = $_POST['payment_gross'];
而且我有通过短信发送的金额
$headersCell = 'From: "" <"' . $_POST['payment_gross']. '">'. "\r\n". "Content-type:text/html;charset=iso-8859-1" . "\r\n";
mail($emailtoCell, $subjectCell, $textCell, $headersCell);
奇怪。今晚我放弃。当付款金额为整型时,请尝试下限$payment\u amt*100确保数据库中的“付款金额”字段具有浮动或双精度类型。此时可能是INT或其他整数 删除字段中的引号,然后尝试:
mysql_query("INSERT INTO al_paypal
(item_name,item_number,payment_status,payment_amt,txn_id,payer_email,custom,commerce_id)
VALUES (
'". $item_name ."',
'". $item_number ."',
'". $payment_status ."',
". $payment_amt .",
'". $txn_id ."',
'". $payer_email ."',
'". $custom ."',
'". $commerce_id ."'
)") or die(mysql_error());
删除//不记录金额是否包含小数查询中不需要在小数点附近加引号。它可能会引起问题?尝试浮动金额$付款金额,另外,该列是什么类型的MySQL?是否插入了任何值?PHP脚本的区域设置是什么,特别是小数点字符?请参阅的输出。您应该考虑使用MySQL所识别的格式来获取文本值。对于调试,我建议您将SQL文本创建到变量中,并在执行该变量之前对其进行回响。e、 g.$sql=插入;echo$sql;mysql\u查询$sql;。请注意,您发布的代码包括//does。。。作为SQL文本的一部分。MySQL将以语法错误拒绝该选项。@AJReading,我的列配置为Double。我在没有运气的情况下编辑后尝试了你的解决方案。这并不能解释为什么没有存储的整数部分。MySQL将接受“100.34”作为整数列的插入,进行适当的转换,丢失.34并提供数据截断警告,但插入将成功。此外,DECIMALm,n数据类型特别适合存储具有固定小数位数的数值,例如以美元和美分表示的付款金额。我将列改为双精度。同样的问题。现在它记录:0。之前,是的,如您所述。@user3371049可以将其余代码放入此代码中吗?@user3371049我编辑了此帖子并将其放入或退出mysql\u错误;我在我的原始帖子中添加了一些代码,以及我不同尝试的结果。明天再谈,解决了!谢谢大家的帮助。请参见顶部我的原始帖子的开头。