我很确定,这是一个常见的问题,但我正在寻找最佳实践解决方案。
我有一个遗留数据库,为此我编写了一个用于迁移数据的脚本。
在我的脚本中,我有以下内容:
$select = $dbh->query("SELECT CollectionID, CollectionCode, Name FROM $db_local.collection");
while ($collection_row = $select1->fetch (PDO::FETCH_ASSOC)) {
$collection_id = $collection_row['CollectionID'];
$collection_code = !empty($collection_row['CollectionCode']) ? "'{$collection_row['CollectionCode']}'" : "NULL";
$collection_name = !empty($collection_row['Name']) ? "'{$collection_row['Name']}'" : "NULL";
$dbh->exec("INSERT INTO $db_remote.cdrs_collectiononline (
collection_id,
collection_code,
collection_name
) VALUES (
$collection_id,
$collection_code,
$collection_name
)");
}
这一切都很好,直到我遇到这一行:
| CollectionID | CollectionCode | Name |
+--------------+----------------+-------------------------------------+
| 1032 | MHNG | Muséum d'Histoire Naturelle, Genève |
如果我直接在mysql中做这个(注意双引号):
INSERT INTO cdrs_collectiononline (collection_id, collection_code, collection_name) VALUES ('1032', 'MHNG', "Muséum d'Histoire Naturelle, Genève")
有效。使用mysql pdo处理这些拉丁字符的可能性的最佳方法是什么?
任何帮助都非常感激。
答案 0 :(得分:1)
尝试:
$collection_name = addslashes(mysql_escape_string($collection_name));
或:
$dbh->exec("INSERT INTO $db_remote.cdrs_collectiononline (
collection_id,
collection_code,
collection_name
) VALUES (
'".$collection_id."',
'".$collection_code."',
'".$collection_name."'
)");
答案 1 :(得分:0)
有点晚了,但它可以帮助别人!
最好使用pdo prepare和bindParam:http://fr2.php.net/manual/fr/pdostatement.bindparam.php
根据你选择的类型,它会逃脱角色。