Php MySql查询:难以记录金额包含小数的字段

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

添加-解决:我的代码从一开始就很好,问题是使用的货币,如果是美元,它将按原样工作。我的测试是用CAD货币完成的,为此,amount_gross从Paypal返回了一个空值文档,必须使用mc_gross-适用于所有货币

因此,适用于所有货币的正确代码为:

$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错误;我在我的原始帖子中添加了一些代码,以及我不同尝试的结果。明天再谈,解决了!谢谢大家的帮助。请参见顶部我的原始帖子的开头。