我正在使用这段代码,我感到非常沮丧:
try {
$dbh = new PDO('mysql:dbname=' . DB . ';host=' . HOST, USER, PASS);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$dbh->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND, "SET NAMES 'utf8'");
}
catch(PDOException $e)
{
...
}
$stmt = $dbh->prepare('INSERT INTO table(v1, v2, ...) VALUES(:v1, :v2, ...)');
$stmt->bindParam(':v1', PDO::PARAM_NULL); // --> Here's the problem
Run Code Online (Sandbox Code Playgroud)
PDO::PARAM_NULL, null, '', 所有这些都失败并抛出此错误:
致命错误:无法通过/ opt /中的引用传递参数2
使用PHP PDO for mysql更新具有空值的非可空字段时,我无法生成错误或异常.直接sql给出了预期的错误.
来自PDO的所有内容都会导致status_id字段的值设置为0,而不是异常或错误,表示该字段不允许为null.
$stmt_handler = $this->db_handler->prepare(
"UPDATE faxes SET metadata = :metadata, status_id = :status_id,
created = :created, updated = :updated, content = :content,
vendor_fax_id = :vendor_fax_id WHERE id = :id");
$stmt_handler->bindParam(':id', $fax->id);
$stmt_handler->bindParam(':metadata', $fax->metadata);
$stmt_handler->bindParam(':status_id', $fax->status_id); // tried different combinations
$stmt_handler->bindParam(':created', $fax->created);
$stmt_handler->bindParam(':updated', $fax->updated);
$stmt_handler->bindParam(':content', $fax->content);
$stmt_handler->bindParam(':vendor_fax_id', $fax->vendor_fax_id);
$stmt_handler->execute();
Run Code Online (Sandbox Code Playgroud)
我尝试了不同的组合并将PDO :: ATTR_EMULATE_PREPARES设置为false(正如此问题所建议的那样,PHP mysql PDO拒绝设置NULL值)
我的原始绑定:
bindParam(':status_id', $fax->status_id);
Run Code Online (Sandbox Code Playgroud)
尝试过
bindValue(':status_id', null, PDO::PARAM_INT);
bindValue(':status_id', null, PDO::PARAM_NULL);
bindValue(':status_id', 'NULL', PDO::PARAM_INT);
bindValue(':status_id', 'NULL', PDO::PARAM_NULL);
bindValue(':status_id', null);
bindValue(':status_id', …Run Code Online (Sandbox Code Playgroud)