php - 如何用 php 显示 mdb(access) 文件字段(包括 utf8(阿拉伯波斯语)字符)?

标签 php mysql ms-access utf-8

我有一个包含阿拉伯语或波斯语字符的 access(.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 ) 但不起作用!

谁能帮帮我?

谢谢。

最佳答案

您的阿拉伯字符可能存储在 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();
}

关于php - 如何用 php 显示 mdb(access) 文件字段(包括 utf8(阿拉伯波斯语)字符)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17063599/

相关文章:

sql - 如何使用 SQL 语句拉取多条记录?

sql-server - 愚蠢用户的可用 View ?

php - magento - 在发货电子邮件中添加总计 block

php - 我应该将一次性站点选项保存在单独的表中吗? - Laravel 5

javascript - 使用 MySQL、PHP 和 angular.js 在数据库中插入数据数组

mysql - SQL语句忽略where参数

vba - 关闭绑定(bind)表单而不保存更改

javascript - 如何使用表单中的输入变量来更新另一个 php 的图表?

php - 我可以在 PHP 中创建没有 session 的购物车吗?

Mysql Select 语句相对于另一个表字段