PHP将乱码添加到传递给mysql_query的字符串中

时间:2011-07-08 20:36:02

标签: php mysql logging

在PHP中,我使用mysql_query($querystring)将一些信息插入表中。

但是,当我查看MySQL查询日志时,它会显示添加了乱码:

MySQL日志:

INSERT INTO database.table 
SET
`col1` = '0^@0^@:^@0^@0^@:^@1^@8',
`col2` = '3^@8^@0',
`col3` = '3^@6^@8',
`col4` = '1^@2'

当我在$ querystring上执行var_dump()时,一切看起来都很好,没有附加^ @。

PHP var_dump() - 注意:我刚编了333号。

string(333) "INSERT INTO database.table 
SET
`col1` = '00:00:18',
`col2` = '380',
`col3` = '368',
`col4` = '12'"

然而,MySQL日志显示^ @。有没有办法从$ querystring中剥离^ @?

存储在数据库中的值是'00:00:00'(该字段的默认值),'3','3'和'1'。 Col1的类型为date,Col2-4为smallint(5)。

4 个答案:

答案 0 :(得分:2)

桌子到底发生了什么? 也许你在col1 = '00:00:18'之后忘记了“,”?

答案 1 :(得分:1)

确保您的字段类型为VARCHAR,或者至少为INTMySQL可能会弄乱你的字符串,使它们适合不合适的类型。

答案 2 :(得分:0)

以下是我最终使用的修复:

/* 
        Strip hidden gibberish characters inherited from the original .csv file
        NOTE: Do a var_dump() to check for hidden gibberish characters, compare the string length from the var_dump() to an eye count of the character length that shows on the screen. Also, check MySQL Query Log to see what characters are being added during INSERT
*/

    for($j=0; $j<strlen( $Parts[$i]);$j++)
    {
        if(is_numeric($Parts[$i][$j]) or $Parts[$i][$j]==':' or $Parts[$i][$j]=='.')
        $stringholder.=$Parts[$i][$j];
    }
    $Parts[$i] = $stringholder;
    $stringholder ="";

不是最干净,但完成工作。

答案 3 :(得分:0)

结束编码问题。

修正:

$string_input_to_mysql_query = iconv("UCS-2", "ISO-8859-1", $string_input_to_mysql_query);