2

PHP を使用して、会社の記録のデータベースを作成しています。会社名と使用する通貨の種類のフィールドがあります。
しかし、PHP を使用すると、通貨が英ポンド記号 (£) の場合、レコードが挿入されません。ドル記号 ($) またはその他の通常の文字は問題ありません。シャープ記号の付いたレコードは、SQL ステートメントを実行して MySQL Query Browser に直接入力すると問題なく挿入されます。しかし、まったく同じ INSERT ステートメントを PHP で実行してもうまくいきません。

$sql = "INSERT INTO company_test (name, currency) VALUES ('ABC Widgets', '£')";   
$rs = mysql_query($sql, $conn);
//Does not insert a record

$sql = "INSERT INTO company_test (name, currency) VALUES ('ABC Widgets', '$')";   
$rs = mysql_query($sql, $conn);
//A record inserts just fine

//My MySQL version is 5.5.11.  PHP is version 5.3.6.  
//The MySQL table looks like this:
TABLE company_test
FIELD | id       | INTEGER(10) | not null | auto increment
FIELD | name     | VARCHAR(45) | not null
FIELD | currency | VARCHAR(3)  

MySQL Query Browser の [Table Options] タブは、この company_test テーブルの文字セットが utf8 であることを示しています。

ありがとう。

4

3 に答える 3

1

エラーを確認します。

$rs = mysql_query($sql, $conn) or die(mysql_error());
                               ^^^^^^^^^^^^^^^^^^^^^

クエリが成功すると想定しないでください。SQL 構文が完璧であっても、チェックしない理由は他にもたくさんあります。

于 2012-08-09T17:47:05.887 に答える
1

いくつかのグーグルの後、私はついにうまくいくものを見つけました。おそらく似たような人が、SQL ステートメントの文字セットを変換する PHP 関数を作成しました。
挿入前のクエリは次のようになります。 INSERT INTO company_test (name, currency) VALUES ('ABC Widgets', '£') ポンド記号の前にあるおかしな小さな文字に注目してください。

とにかくここに関数があります:

function TtoUtf8( &$string, $encType = 'ISO-8859-1' ) 
{ 
    $enc    = mb_detect_encoding( $string ); 
    $enc ? 
        $enc = $enc : 
        $enc = $encType; 
    if ( $enc == 'UTF-8' ) 
    { 
        return $string; 

        // end if $enc == UTF-8 
    } else 
    { 
        $conv = iconv( $enc, 'UTF-8//TRANSLIT', $string ); 
        $conv ? 
            $ret = &$conv : 
            $ret = &$string; 
        return $ret; 
    } 

}

于 2012-08-09T20:28:16.333 に答える
-1

最初に htmlentities または htmlspecialchar に変換してみませんか。

$currency = htmlspecialchars('£');
$sql = "INSERT INTO company_test (name, currency) VALUES ('ABC Widgets', '{$currency}')"; 

また、通貨フィールドはどのタイプのデータ型ですか?

于 2012-08-09T17:49:01.437 に答える