代码之家  ›  专栏  ›  技术社区  ›  Thread7

无法使用PHP获取要插入到mysql数据中的记录

  •  2
  • Thread7  · 技术社区  · 12 年前

    我正在使用PHP来填充公司记录的数据库。我有一个公司名称和他们使用的货币类型的字段。
    但当我使用PHP时,如果货币是英语磅符号(),则永远不会插入记录。美元符号($)或任何其他正常字符都没有问题。当我运行sql语句并将其直接输入MySQL查询浏览器时,带有磅号的记录插入得很好。但当我在PHP中运行完全相同的INSERT语句时,它就不起作用了。

    $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查询浏览器中,“表选项”选项卡显示,对于这个company_test表,我的字符集是utf8。

    谢谢

    3 回复  |  直到 12 年前
        1
  •  1
  •   Marc B    12 年前

    检查错误:

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

    永远不要假设查询成功。即使您的sql语法是完美的,也有太多其他原因导致无法进行NOT检查。

        2
  •  1
  •   Thread7    12 年前

    经过一番谷歌搜索,我终于找到了一些有用的东西。类似的人可能创建了一个PHP函数来转换sql语句的字符集。
    现在我的查询在插入之前是这样的: 插入公司测试(名称、货币)值('ABC小工具','') 注意英镑符号前的有趣的小字符。

    无论如何,这里是函数:

    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; 
        } 
    

    }

        3
  •  -1
  •   raygo    12 年前

    为什么不先将其转换为htmlentities或htmlspecialchar:

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

    此外,您的货币字段是什么类型的数据类型?