gpt4 book ai didi

php - 奇怪的 PDO 行为

转载 作者:行者123 更新时间:2023-11-29 21:36:02 25 4
gpt4 key购买 nike

我使用以下代码:

 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");

我得到一个空结果。

显然描述字段是存在的。显然我使用 PHPMyAdmin 测试了新查询。

我发现:

if ($stmt->rowCount() > 0)

TRUE,我还尝试将fetclAll更改为FETCH_BOTH

你有什么建议吗?

编辑:好的,我发现问题了:

在一条记录中,描述列中有一个“è”。如果我删除“è”,一切都会正常工作。为什么会发生这种情况?

最佳答案

问题是由于数据库记录中的重音字母引起的。

解决方案是使用 array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8mb4") 将连接的字符集设置为“UTF-8”多字节 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 .

关于php - 奇怪的 PDO 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34912631/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com