带有特殊字符的PHP PDO [英] PHP PDO with Special Characters

查看:108
本文介绍了带有特殊字符的PHP PDO的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I am using PDO for MySQL database connection, selecting, updating and deleting.

但是我在选择带有特殊字符的行时遇到了问题,例如,我想选择带有'Judge-FürstováMila'的页面标题,

But I have a problem with selecting rows with special characters, for instance, I want to select a page title with 'Judge-Fürstová Mila',

page

id    title                     content
1     Judge-Fürstová Mila       xxx

SQL

SELECT *
FROM page
WHERE title = 'Judge-Fürstová Mila'

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

Returns result if I query via phpmyadmin.

但是它会通过PDO返回0

But it return 0 with PDO,

$sql = ' SELECT *
    FROM page
    WHERE title = ?';

$items = $connection->fetch_assoc($sql,'Judge-Fürstová Mila');

下面是我的数据库类,

class database_pdo
{
    # database handler
    protected $connection = null;

    # make a connection
    public function __construct($dsn,$username,$password)
    {
        try 
        {
            # MySQL with PDO_MYSQL  
            $this->connection = new PDO($dsn, $username, $password);
            $this->connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
        }
        catch (PDOException $e) 
        {
            # call the get_error function
            $this->get_error($e);
        }
    }

    # don't forget to add getter method to get $this->connection, it's just a good practice.
    public function get_connection()
    {
        return $this->connection;
    }

    public function fetch_assoc($query, $params = array())
    {
        try
        {
            # prepare the query
            $stmt = $this->connection->prepare($query);

            # if $params is not an array, let's make it array with one value of former $params
            if (!is_array($params)) $params = array($params);

            # execute the query
            $stmt->execute($params);

            # return the result
            return $stmt->fetch();
        }
        catch (PDOException $e) 
        {
            # call the get_error function
            $this->get_error($e);
        }

    }

我错过了db类中的其他内容吗?

Have I missed something in my db class or something else?

推荐答案

尝试在$dsn中添加charset=UTF-8并进行更改

Try to add charset=UTF-8 in your $dsn, and change

$this->connection = new PDO($dsn, $username, $password);

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

我相信这是SET NAMES utf8事情,至少在我的情况下

I believe it is that SET NAMES utf8 thingie, at least it was in my case

这篇关于带有特殊字符的PHP PDO的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆