PHP和MySQL使用PDO类

时间:2012-10-31 03:43:59

标签: php mysql pdo

我正在尝试更新数据库,这是我的代码

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类。它没有达到“捕获”声明。任何帮助都会很棒。最终结果是页面返回到更新余额的起始位置。

2 个答案:

答案 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'];