1

我有一个 XML 文件,其中包含来自 latin1 编码的 latin1_swedish_ci 整理表的数据,我想将其传输到另一个 mysql 表。我已经使用相同的编码设置了目标表。我为表的每一行查询数据库,最后我把所有的特殊字符都弄乱了。我还在 XML 文件中设置了编码<?xml version="1.0" encoding="latin1" ?>。会不会是PHP的问题?我是否必须在其他地方设置编码:

这是我的脚本:

    // create table courses if not exists
echo("Creating new tables...\n");
if (!mysql_query("CREATE TABLE IF NOT EXISTS members (
    id int(11) NOT NULL,
    isfg_no int(11) NOT NULL,
    lab_id int(11) NOT NULL,
    first varchar(256) NOT NULL,
    last varchar(512) NOT NULL,
    PRIMARY KEY (id)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1"))
    die(mysql_error());

    // load xml file
echo "Loading XML file...\n";
$members = simplexml_load_file("members.xml");

foreach ($members as $row) {
    $id = mysql_real_escape_string($row->SO_IdSocio);
    $isfg_no = mysql_real_escape_string($row->SO_Numisfg);
    $lab_id = mysql_real_escape_string($row->SO_Numlab);
    $first = mysql_real_escape_string($row->SO_Nombre);
    $last = mysql_real_escape_string($row->SO_Apellidos);

    if (!mysql_query("INSERT INTO members (id, isfg_no, lab_id, first, last)VALUES ('$id', '$isfg_no', '$lab_id', '$first', '$last')")) 
        die(mysql_error());
}

这是一些 XML

<?xml version="1.0" encoding="latin1" ?>
<SOCIOS_INTRA>
<row>
    <SO_IdSocio>1</SO_IdSocio>
    <SO_Numsocio>001</SO_Numsocio>
    <SO_Numisfg>404</SO_Numisfg>
    <SO_Nombrelab>SIN LABORATORIO</SO_Nombrelab>
    <SO_Numlab>0</SO_Numlab>
    <SO_Nombre>******</SO_Nombre>
    <SO_Apellidos>*******</SO_Apellidos>
    <SO_Direccion>C/Recoletos 22, 3ª planta</SO_Direccion>
    <SO_Cp>28001</SO_Cp>
    <SO_Poblacion>Madrid</SO_Poblacion>
    <SO_Provincia>Madrid</SO_Provincia>
    <SO_Idpais>25</SO_Idpais>
    <SO_Email1>*******</SO_Email1>
    <SO_Email2></SO_Email2>
    <SO_Telefono>***</SO_Telefono>
    <SO_Fax>****</SO_Fax>
    <SO_Login></SO_Login>
    <SO_Password></SO_Password>
    <SO_Fecha>19960101</SO_Fecha>
    <SO_SituacionISFG>0</SO_SituacionISFG>
    <SO_SituacionGEP>1</SO_SituacionGEP>
    <SO_Observaciones></SO_Observaciones>
</row>
4

1 回答 1

1

您不需要在 PHP 中设置编码。您应该将SET NAMES 'latin1'其用作第一个 SQL 语句。

更新:

我认为您配置错误的服务器。我已经运行了这段代码并且一切正常

<?php

$lnk=mysql_connect('localhost', 'root', '');
mysql_select_db('test', $lnk);

echo("Creating new tables...\n");
if (!mysql_query("CREATE TABLE IF NOT EXISTS members (
    id int(11) NOT NULL,
    isfg_no int(11) NOT NULL,
    lab_id int(11) NOT NULL,
    first varchar(256) NOT NULL,
    last varchar(512) NOT NULL,
    PRIMARY KEY (id)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1"))
    die(mysql_error());

    // load xml file
echo "Loading XML file...\n";
$members = simplexml_load_file("members.xml");

foreach ($members as $row) {
    $id = mysql_real_escape_string($row->SO_IdSocio);
    $isfg_no = mysql_real_escape_string($row->SO_Numisfg);
    $lab_id = mysql_real_escape_string($row->SO_Numlab);
    $first = mysql_real_escape_string($row->SO_Nombre);
    $last = mysql_real_escape_string($row->SO_Apellidos);

    if (!mysql_query("INSERT INTO members (id, isfg_no, lab_id, first, last)VALUES ('$id', '$isfg_no', '$lab_id', '$first', '$last')")) 
        die(mysql_error());
    else
        print("INSERT INTO members (id, isfg_no, lab_id, first, last)VALUES ('$id', '$isfg_no', '$lab_id', '$first', '$last')<br />");
}

?>

和这个 XML

<?xml version="1.0" encoding="latin1" ?>
<SOCIOS_INTRA>
<row>
    <SO_IdSocio>2</SO_IdSocio>
    <SO_Numsocio>001</SO_Numsocio>
    <SO_Numisfg>404</SO_Numisfg>
    <SO_Nombrelab>SIN LABORATORIO</SO_Nombrelab>
    <SO_Numlab>0</SO_Numlab>
    <SO_Nombre>******</SO_Nombre>
    <SO_Apellidos>*******</SO_Apellidos>
    <SO_Direccion>C/Recoletos 22, 3ª planta</SO_Direccion>
    <SO_Cp>28001</SO_Cp>
    <SO_Poblacion>Madrid</SO_Poblacion>
    <SO_Provincia>Madrid</SO_Provincia>
    <SO_Idpais>25</SO_Idpais>
    <SO_Email1>*******</SO_Email1>
    <SO_Email2></SO_Email2>
    <SO_Telefono>***</SO_Telefono>
    <SO_Fax>****</SO_Fax>
    <SO_Login></SO_Login>
    <SO_Password></SO_Password>
    <SO_Fecha>19960101</SO_Fecha>
    <SO_SituacionISFG>0</SO_SituacionISFG>
    <SO_SituacionGEP>1</SO_SituacionGEP>
    <SO_Observaciones></SO_Observaciones>
</row><row>
    <SO_IdSocio>3</SO_IdSocio>
    <SO_Numsocio>001</SO_Numsocio>
    <SO_Numisfg>404</SO_Numisfg>
    <SO_Nombrelab>SIN LABORATORIO</SO_Nombrelab>
    <SO_Numlab>0</SO_Numlab>
    <SO_Nombre>******</SO_Nombre>
    <SO_Apellidos>*******</SO_Apellidos>
    <SO_Direccion>C/Recoletos 22, 3ª planta</SO_Direccion>
    <SO_Cp>28001</SO_Cp>
    <SO_Poblacion>Madrid</SO_Poblacion>
    <SO_Provincia>Madrid</SO_Provincia>
    <SO_Idpais>25</SO_Idpais>
    <SO_Email1>*******</SO_Email1>
    <SO_Email2></SO_Email2>
    <SO_Telefono>***</SO_Telefono>
    <SO_Fax>****</SO_Fax>
    <SO_Login></SO_Login>
    <SO_Password></SO_Password>
    <SO_Fecha>19960101</SO_Fecha>
    <SO_SituacionISFG>0</SO_SituacionISFG>
    <SO_SituacionGEP>1</SO_SituacionGEP>
    <SO_Observaciones></SO_Observaciones>
</row>
</SOCIOS_INTRA>
于 2012-09-10T18:13:08.430 回答