我正在尝试更新数据库,这是我的代码
if (isset($_GET['placeorder']))
{
include 'includes/db.php';
try
{
$newBalance = $_POST['balance'] + $_POST['oldbalance'];
$sql = 'UPDATE customer SET
balance = :balance
WHERE id = :id';
$s = $pdo->prepare($sql);
$s->bindValue(':balance', $newBalance);
$s->execute();
}
catch (PDOException $e)
{
$error = 'Could not add the new balance for the customer' . $e->getMessage();
include 'result.php';
exit();
}
header('Location: .');
exit();
我要做的是更新来自已提交表单的客户的余额。如果我尝试回显值$s->execute();
,我将能够获得代码中的值一直到达$newBalance
的位置,它将在执行该行后显示,页面变成空白。 execute语句中发生了一些事情。 $s->execute()
它不允许我的代码继续进行。任何的想法?我是否以错误的方式使用PDO类。它没有达到“捕获”声明。任何帮助都会很棒。最终结果是页面返回到更新余额的起始位置。
答案 0 :(得分:1)
您只是将一个值绑定到余额,而不是id,您需要一行代码:
$s->bindValue(':id', $id);
在查询中使用$_POST['balance']
和$_POST['oldbalance']
之前,确保设置$balance = isset($_POST['balance'])? $_POST['balance'] : 0;
$oldbalance = isset($_POST['oldbalance'])? $_POST['oldbalance'] : 0;
$newbalance = $balance + $oldbalance;
和error_reporting(E_ALL);
是个好主意:
{{1}}
如果您没有收到错误消息,则可能没有错误报告,您可以通过在页面顶部添加{{1}}来启用它。
答案 1 :(得分:0)
var_dump()
变量$_POST['balance']
& $_POST['oldbalance']
。我相信他们会以string
的身份出现。型铸造是解决方案之一。在这种情况下尝试进行类型转换以在int / float上执行添加。
$newBalance = (int)$_POST['balance'] + (int)$_POST['oldbalance'];