PHP mysqli stmt unicode scrambled


PHP mysqli stmt unicode scrambled

$HotelName = "Adams’ Inn";
$ID = 1;
$stmt = $sql->prepare("UPDATE coupons SET HotelName=? WHERE ID=?");
$stmt->bind_param("si",$HotelName,$ID);
$stmt->execute();

输出:亚当斯™旅馆

顺便说一下,我有以下几种:

字符集:utf8

排序规则:utf8_general_ci

检查表

  1. $sql->set_charset('utf8')
  2. 任何输出前的header('Content-Type: text/html; charset=utf-8');

涉及到两个方面——服务器和客户端。客户端是指PHP脚本,而不是HTTP客户端。服务器需要知道客户端期望什么编码
并且您只设置服务器端编码,告诉mysql必须在哪个编码数据中存储
但也有一个客户。

事实上,Mysql在重新编码方面非常出色。只要一种编码可以转换成另一种编码,Mysql就可以做到。例如,对于不同的客户端
现在对它的要求不太高,但这一特点是存在的。因此,Mysql需要知道客户端支持哪种编码。为此,set_charset()函数存在。

查询中缺少SET关键字

$HotelName = "Adams’ Inn";
$ID = 1;
$stmt = $sql->prepare("UPDATE coupons SET HotelName=? WHERE ID=?");
$stmt->bind_param("si",$HotelName,$ID);
if($result=$stmt->execute())
   echo "Data Updated Sucessfully!!!";
else
   echo "Error in Update";

它是如此简单的

只需放入

mysqli_set_charset($db_connection, 'utf8');

数据库连接后。

示例

$con=mysqli_connect("localhost", "root", "xxxxx","database");
mysqli_set_charset($con, 'utf8');