我正在使用以下代码:
try {
$this->conn = new PDO("mysql:host=" . DB_HOST . ";dbname=" . DB_NAME, DB_USERNAME, DB_PASSWORD);
$this->conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch(PDOException $e)
{
echo $e->getMessage();
}
try {
$stmt = $this->conn->prepare("SELECT id, name FROM images");
if ($stmt->execute()) {
if ($stmt->rowCount() > 0)
return $stmt->fetchAll(PDO::FETCH_ASSOC);
}
else
return NULL;
}
catch(PDOException $e)
{
return $e->getMessage();
}
代码完美有效,但当我将查询编辑为:
时$stmt = $this->conn->prepare("SELECT id, name, description FROM images");
我得到一个空的结果。
显然 description 字段存在。显然我用PHPMyAdmin测试了新查询。
我发现:
if ($stmt->rowCount() > 0)
TRUE ,我还尝试将 fetclAll 更改为 FETCH_BOTH 。
你有什么建议吗?
编辑:好的,我发现了问题:
在记录中,描述列中有一个“è”。如果我删除“è”,一切都很完美。为什么会这样?
答案 0 :(得分:0)
问题是由于数据库记录中带有重音字母。
解决方案是使用 array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8mb4")
将连接的字符集设置为' UTF-8 MultiByte 4'如下:
try {
$this->conn = new PDO("mysql:host=" . DB_HOST . ";dbname=" . DB_NAME, DB_USERNAME, DB_PASSWORD, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8mb4"));
$this->conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch(PDOException $e)
{
echo $e->getMessage();
}
使用此特定版本的UTF-8的原因解释为here。