带有特殊字符的PHP PDO [英] PHP PDO with Special Characters
本文介绍了带有特殊字符的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屋!
查看全文