PDO UPDATE不起作用 - 语法看起来正确,PDO设置为抛出异常

时间:2014-11-15 15:48:15

标签: pdo sql-update

连接数据库时,我按如下方式设置PDO选项:

$options = array(
    PDO::ATTR_PERSISTENT        => false,
    PDO::ATTR_EMULATE_PREPARES  => false,
    PDO::ATTR_ERRMODE           => PDO::ERRMODE_EXCEPTION
);
$db = new PDO($dsn, $user, $password, $options);

在代码中,我使用数据库信息初始化资产类型,然后将其与用户提交的内容进行比较,以查看是否需要进行任何更改:

$manufacturer = filter_input(INPUT_POST, 'manufacturer', FILTER_SANITIZE_STRING);
$model = filter_input(INPUT_POST, 'model', FILTER_SANITIZE_STRING);
$fixed = isset($_POST['fixed']) ? TRUE : FALSE;
$asset_type_id = filter_input(INPUT_POST, 'asset_type_id', FILTER_SANITIZE_NUMBER_INT);

$asset_type->initialize($db, $asset_type_id);
$asset_type->update($db, $manufacturer, $model, $fixed);

initialize(...)函数获取数据库中的当前信息并正确配置对象...

function initialize(PDO $db, $asset_type_id){
    $this->asset_type_id = $asset_type_id;
    $asset_type_statement = $db->prepare("SELECT * FROM asset_type WHERE id=:asset_type_id");
    $asset_type_statement->bindValue(':asset_type_id', $asset_type_id, PDO::PARAM_INT);
    $asset_type_statement->execute();
    $asset_type_result = $asset_type_statement->fetch(PDO::FETCH_ASSOC);
    ...

但更新(...)功能不起作用......没有错误,但也没有更新。

function update(PDO $db, $manufacturer, $model, $fixed) {
    try{
        if($this->manufacturer !== $manufacturer  || $this->model !== $model || $this->fixed != $fixed) {
            $update_asset_type_statement = $db->prepare("UPDATE asset_type SET manufacturer = :manufacturer, model = :model, fixed = :fixed WHERE id = :asset_type_id");
            $update_asset_type_statement->bindValue(':manufacturer', $manufacturer, PDO::PARAM_STR);
            $update_asset_type_statement->bindValue(':model', $model, PDO::PARAM_STR);
            $update_asset_type_statement->bindValue(':fixed', $fixed, PDO::PARAM_BOOL);
            $update_asset_type_statement->bindValue(':asset_type_id', $this->asset_type_id, PDO::PARAM_INT);
            $update_asset_type_statement->execute();
        }
    } catch (PDOException $ex) {
        echo $ex->getMessage();
    }
}

我已经完成了代码,所有变量都有预期的值。我很茫然。

非常感谢任何帮助:)

1 个答案:

答案 0 :(得分:1)

Must Be Built看到评论后 我将代码更改为:

$update_asset_type_statement->bindValue(':fixed', $fixed, PDO::PARAM_STR);
$update_asset_type_statement->bindValue(':asset_type_id', $this->asset_type_id, PDO::PARAM_INT);

现在它有效 - 所以我的问题是,为什么首先要使用PDO :: PARAM_BOOL?