连接数据库时,我按如下方式设置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();
}
}
我已经完成了代码,所有变量都有预期的值。我很茫然。
非常感谢任何帮助:)
答案 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?