我有一个访问(.mdb)文件,包括阿拉伯语或波斯语字符。
我需要在php中使用它或将其导入MySQL。
但它显示????而不是utf8字。
这是我的代码:
$conn = new COM("ADODB.Connection") or die("Cannot start ADO");
$db_connstr = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=".realpath("test.mdb")." ; DefaultDir=".realpath("");
$conn->open($db_connstr);
$conn2 = mysql_connect($dbhost, $dbuser, $dbpass) or die ('Error connecting to mysql');
//mysql_query("set names 'utf8'");
mysql_select_db($dbname);
$rs = $conn->Execute("SELECT name FROM test");
while (!$rs->EOF)
{
$name = $rs->Fields("name");
//echo utf8_encode ( $name );
mysql_query("INSERT INTO test (id,name) VALUES (NULL,'".$name."') ");
$rs->MoveNext();
}
$rs->Close();
然后我使用mysql_query("set names 'utf8'")
和utf8_encode ( $name )
但没有工作!
任何人都可以帮助我吗?
感谢。
答案 0 :(得分:1)
您的阿拉伯字符可能存储在MS Access中的CP-1256中。在写入数据库之前,需要将它们转换为utf8。我使用PDO而不是你不推荐使用的mysql_ *函数。输入您的用户名,密码和数据库名称:
<?php
$conn = new COM("ADODB.Connection") or die("Cannot start ADO");
$db_connstr = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=".realpath("test.mdb")." ; DefaultDir=".realpath("");
$conn->open($db_connstr);
try {
//connect to mysql
$username = 'user';
$password = 'secret';
$db_name = 'test';
$mysql_conn = new PDO('mysql:host=localhost;dbname='.$db_name, $username, $password);
$mysql_conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$mysql_conn->exec("SET NAMES 'utf8'");
//prepare MySQL insert statement
$stmt = $mysql_conn->prepare('INSERT INTO `test` SET value=:value');
$rs = $conn->Execute("SELECT name FROM test");
while (!$rs->EOF)
{
$name = $rs->Fields("name");
//convert from cp1256 to uft8
$name = iconv('cp1256', 'utf-8', $name);
//insert into MySQL
$stmt->execute(array("value" => $name));
$rs->MoveNext();
}
$rs->Close();
} catch(PDOException $e) {
echo 'ERROR: ' . $e->getMessage();
}