2011-07-08 48 views
1

在PHP中,我使用mysql_query($querystring)将一些信息插入到表中。PHP将字符串添加到传递到mysql_query中的字符串

然而,当我在看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' 

当我做$查询字符串,一切看起来都一个的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是日期类型,Col2-4是smallint(5)。

+0

原代码有一个 “” 后'col1' = '00:00:18' ,所以,不,它不是一个缺少逗号。 – random21

回答

0

最终成为编码问题。

修复:

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

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

+2

不及格,我怀疑他插入的字段类型是奇怪的 –

+1

我的不好,只是在输入帖子时忘了“,”。 – random21

+0

是否有错误发生?如果不是,执行语句后该表的内容是什么?请按照Kerin的建议检查您的字段类型。 – Kazuo

1

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

+0

除日期栏外,他们都是smallint(5)。我试着将它们设置为varchar和int,并得到相同的结果。 – random21

0

这里是我结束了使用fix:

/* 
     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 =""; 

不干净的,但能够完成任务。