Код был протестирован, что вся информация о заголовке сообщения message_id, uid, subject gmail может быть вставлена в мою базу данных sqlite3.Почему я не могу вставить тему моего заголовка в базу данных sqlite3?
<?php
$db='/home/email.db';
// function get_gmail can get all the message_id,uid,subject gmail header info.
function get_gmail(){
$email_data=array();
$hostname = '{imap.gmail.com:993/imap/ssl}';
$username = '[email protected]';
$password = 'yyyy';
$inbox = imap_open($hostname,$username,$password);
$nums=imap_num_msg($inbox);
for ($i=1;$i<=$nums;$i++){
$overview = imap_fetch_overview($inbox, $i, 0);
$x1 = $overview[0]->message_id;
$x2 = $overview[0]->uid;
$x3 = $overview[0]->subject;
$email_data[]=array($x1,$x2,$x3);
}
imap_close($inbox);
return $email_data;
}
//function insert_data can insert all the data into my sqlite3 database.
function insert_data($array){
Global $db;
$dbh=new PDO("sqlite:{$db}");
$dbh->beginTransaction();
$sql = "INSERT INTO gmail(message_id,uid,subject) VALUES (?,?,?)";
$query = $dbh->prepare($sql);
foreach($array as $item){
$query->execute($item);
}
$dbh->commit();
$dbh->beginTransaction();
$dbh=null;
}
$data=get_gmail();
insert_data($data);
?>
Проблема остается, например, предмет электронной почты является '=?GB2312?B?zbO8xtGnu/m0ocq10bXP7sS/?='
, он был вставлен в sqlite3 как форме '=?GB2312?B?zbO8xtGnu/m0ocq10bXP7sS/?='
, я изменил его в китайские иероглифы в виде UTF-8 со следующим кодом.
<?php
$db='/home/email.db';
function get_gmail(){
mb_internal_encoding('UTF-8');
$email_data=array();
$hostname = '{imap.gmail.com:993/imap/ssl}';
$username = '[email protected]';
$password = 'yyyy';
$inbox = imap_open($hostname,$username,$password);
$nums=imap_num_msg($inbox);
for ($i=1;$i<=$nums;$i++){
$overview = imap_fetch_overview($inbox, $i, 0);
$x1 = $overview[0]->message_id;
$x2 = $overview[0]->uid;
$x3 = $overview[0]->subject;
$x3 = mb_decode_mimeheader($x3);
$email_data[]=array($x1,$x2,$x3);
}
imap_close($inbox);
return $email_data;
}
function insert_data($array){
Global $db;
$dbh=new PDO("sqlite:{$db}");
$dbh->beginTransaction();
$sql = "INSERT INTO gmail(message_id,uid,subject) VALUES (?,?,?)";
$query = $dbh->prepare($sql);
foreach($array as $item){
$query->execute($item);
}
$dbh->commit();
$dbh->beginTransaction();
$dbh=null;
}
$re=get_gmail();
insert_data($re);
?>
Есть две проблемы, которые необходимо решить.
1.mb_decode_mimeheader
Не все объект в MIME RFC нужен формат 2047, который необходимо изменить, строки начинается с =?GB2312
будет изменен.
Как добавить структуру if-else для выполнения задания?
2. Функция insert_data не может быть запущена.
PHP Неустранимая ошибка: вызов функции-члена execute() для не-объекта в строке 49
Некоторая ошибка в $query->execute($item);
. Почему оператор может быть запущен, если не изменить строку с помощью функции mb_decode_mimeheader?