2012-05-29 28 views
-1

我很確定,這是一個常見問題,但正在尋找最佳實踐解決方案。將帶有拉丁字符的php變量插入到mysql db中

我有一個遺留數據庫,爲此我寫了一個腳本來遷移數據。

在我的劇本我有以下幾點:

$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這些拉丁字符的可能性的最佳方法是什麼?

任何幫助非常感謝。

回答

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."' 
     )"); 
+0

Thankyou雖然'$ collection_name = mysql_escape_string($ collection_name);'就足夠了。再次感謝。 –