相关疑难解决方法(0)

如何使用PDO插入NULL值?

我正在使用这段代码,我感到非常沮丧:

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 mysql null pdo sql-insert

102
推荐指数
5
解决办法
9万
查看次数

"set names"vs mysqli_set_charset - 除了影响mysqli_escape_string之外,它们是否相同?

似乎是常识使用mysql_set_charset/ mysqli::set_charset,而不是直接的MySQL查询的set names.

经常被引用的原因set names是不安全,因为用于mysql_real_escape_string/ 的编码mysqli::real_escape_string只能通过调用mysql_set_charset/ 来设置mysqli::set_charset.(引用的另一个原因是PHP文档说它"不推荐" §.)

但是,set names如果我们使用预备语句mysql_real_escape_string/mysqli::real_escape_string或除了// 之外的其他逃逸方法,使用直接MySQL查询是否安全mysqli_escape_string

除了影响mysql_real_escape_string/ mysqli::real_escape_string/ 的编码, vs/?mysqli_escape_string之间有什么区别吗?set namesmysql_set_charsetmysqli::set_charset

php mysql security encoding libmysql

12
推荐指数
2
解决办法
796
查看次数

PHP mysql PDO在非可空列中设置0,而不是在输入为空时引发异常

使用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)

php mysql pdo

5
推荐指数
1
解决办法
1102
查看次数

标签 统计

mysql ×3

php ×3

pdo ×2

encoding ×1

libmysql ×1

null ×1

security ×1

sql-insert ×1