带有特殊字符的 PHP PDO

lau*_*kok 4 pdo special-characters php-5.3

我正在使用PDO进行 MySQL 数据库连接、选择、更新和删除。

\n\n

但我在选择带有特殊字符的行时遇到问题,例如,我想选择带有“Judge-F\xc3\xbcrstov\xc3\xa1 Mila”的页面标题,

\n\n

桌子page

\n\n
id    title                     content\n1     Judge-F\xc3\xbcrstov\xc3\xa1 Mila       xxx\n
Run Code Online (Sandbox Code Playgroud)\n\n

SQL,

\n\n
SELECT *\nFROM page\nWHERE title = 'Judge-F\xc3\xbcrstov\xc3\xa1 Mila'\n
Run Code Online (Sandbox Code Playgroud)\n\n

如果我通过 phpmyadmin 查询,则返回结果。

\n\n

但它0带着 PDO 返回,

\n\n
$sql = ' SELECT *\n    FROM page\n    WHERE title = ?';\n\n$items = $connection->fetch_assoc($sql,'Judge-F\xc3\xbcrstov\xc3\xa1 Mila');\n
Run Code Online (Sandbox Code Playgroud)\n\n

下面是我的数据库类,

\n\n
class database_pdo\n{\n    # database handler\n    protected $connection = null;\n\n    # make a connection\n    public function __construct($dsn,$username,$password)\n    {\n        try \n        {\n            # MySQL with PDO_MYSQL  \n            $this->connection = new PDO($dsn, $username, $password);\n            $this->connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); \n        }\n        catch (PDOException $e) \n        {\n            # call the get_error function\n            $this->get_error($e);\n        }\n    }\n\n    # don't forget to add getter method to get $this->connection, it's just a good practice.\n    public function get_connection()\n    {\n        return $this->connection;\n    }\n\n    public function fetch_assoc($query, $params = array())\n    {\n        try\n        {\n            # prepare the query\n            $stmt = $this->connection->prepare($query);\n\n            # if $params is not an array, let's make it array with one value of former $params\n            if (!is_array($params)) $params = array($params);\n\n            # execute the query\n            $stmt->execute($params);\n\n            # return the result\n            return $stmt->fetch();\n        }\n        catch (PDOException $e) \n        {\n            # call the get_error function\n            $this->get_error($e);\n        }\n\n    }\n
Run Code Online (Sandbox Code Playgroud)\n\n

我是否错过了数据库课程或其他课程中的某些内容?

\n

Mil*_*ada 5

尝试添加charset=UTF-8您的$dsn, 并更改

$this->connection = new PDO($dsn, $username, $password);
Run Code Online (Sandbox Code Playgroud)

$this->connection = new PDO($dsn, $username, $password, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
Run Code Online (Sandbox Code Playgroud)

我相信这就是那个SET NAMES utf8东西,至少就我而言是这样