2011-07-08 47 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 =""; 

不乾淨的,但能夠完成任務。