【发布时间】:2015-08-06 01:48:30
【问题描述】:
当使用准备好的语句和值绑定在 mysql 中插入(或更新)记录时,我在尝试插入包含扩展 ascii 字符 145(右单引号)的单词 child’s 时遇到了问题。 “d”之后的所有数据都被截断。这适用于插入任何 MS Word 奇数字符。我的表被编码为 utf8_general_ci 并且在我的代码中我一直是 utf-8。该字段的类型为“文本”。
当然,我可以将它们转义或通过str_replace() 删除它们(这是我选择做的),但我想了解为什么我不能直接插入它们,因为我一直认为准备好的语句处理了这个。
示例插入代码 - 不完整,但它显示了基本内容
$q = "INSERT INTO mytable (userid, title, descr) VALUES (?,?,?)";
if (!($stmt = $this->mysqli->prepare($q))) {
error_log("You have a problem...");
return false;
}
/* bind parameters for markers */
$stmt->bind_param("iss", $userid, $title, $descr);
/* execute query */
$stmt->execute();
if ($stmt->errno) {
$e = new Exception;
error_log("\r\nSql Error: " . $q . ' Sql error #: ' . $stmt->errno . ' - ' . $stmt->error . "\r\n" . $e->getTraceAsString());
return false;
} else {
$lastinsertedid = $this->mysqli->insert_id;
/* close statement */
$stmt->close();
return $lastinsertedid;
}
【问题讨论】:
-
你一直使用 utf8 吗?
标签: php mysql encoding prepared-statement extended-ascii