2012-01-05 41 views
-1

第一功能是本PHP刮刀寫入到MySQL數據庫錯誤

   $output_csv = fopen("Poems.csv", "w"); 
..code here 
       $poem_text = trim($pre->innertext); 

       $poem_text = str_replace('"','',$poem_text); 

       $poem_text = html_entity_decode($poem_text); 

       $poem_text = str_replace(array('\\', "\0", "\n", "\r", "\t", "\x1a")," ",$poem_text); 
...code here 
       $p 

    oem_data = array($author_names[$i], $poem_names[$i], $poem_text, $poem_urls[$i]); 
       fputcsv($output_csv, $poem_data); 
...code here 

最後一個功能是

function writeQuotestoDb() { 
    $input_csv = fopen("Poems.csv", "r"); 
    $author_names = array(); 
    $poem_names = array(); 
    $poem_text = array(); 
    $poem_urls = array(); 

    while (($columns = fgetcsv($input_csv, 1000, ",")) !== FALSE) { 
    array_push($author_names, $columns[0]); 
    array_push($poem_names, $columns[1]); 
    array_push($poem_text, $columns[2]); 
    array_push($poem_urls, $columns[3]); 
    } 
    fclose($input_csv); 

    //$dbh = mysql_connect('localhost', 'poetiv', 'alegado'); 
    $dbh = mysql_connect('localhost', 'root', ''); 
    mysql_select_db('test', $dbh); 
    mysql_query("CREATE TABLE IF NOT EXISTS `poem2` (
      `id` INT(20) NOT NULL AUTO_INCREMENT PRIMARY KEY , 
      `author_name` varchar(128) DEFAULT NULL, 
       `poem_name` varchar(128) DEFAULT NULL, 
       `poem_text` text, 
       `poem_url` varchar(1024) DEFAULT NULL 
      ) ENGINE = MYISAM"); 
    mysql_query("TRUNCATE `poem2`");  
    for ($i=0; $i<count($author_names); $i++) { 
     $poems[$i] = substr($poems[$i],7,(strlen($poems[$i])-14)); 
     $poems[$i] = str_replace('"','',$poems[$i]); 
     $query = "insert into poem2 (author_name,poem_name,poem_text,poem_url) values 
     ('" . $author_names[$i] . "', '" . $poem_names[$i]."', '" . $poem_text[$i]."', '" .$poem_urls[$i] ."')"; 
     if(!mysql_query($query)) { echo $query; 
      } 
     } 
    echo count($author_names)." rows....successfully db updated"; 
    //SELECT count(*) FROM `quotes` WHERE criteria = 'Baby Quotes' 
} 

我得到這樣一個例子錯誤

「你好大父母穀物土星,Virmo大!您是 仿古讚譽和貿易Aggredior,敢於開封來源。 瑪麗。齒輪。 1 2.當你,我的上帝,農村色調 佩服,2和來自英國的公共職位退休,11月3日 更長的時間,請她忘恩負義的孩子,4個自己的優勢 犧牲你的情況; 5我進入外資的領域我的命運 傳達,6通過國家卓有成效的不朽的規定,7個其中 軟海域

的「英國沒有逃脫

林如果它需要是不知道」 「或\」

,但我想知道如何解決這個錯誤,並能夠完成編寫所有的SQL數據庫

回答

3
上把它們插入查詢之前你的價值觀

使用mysql_real_escape_string
更重要的是,獲得與時並進,與prepared statements使用PDO擴展。

+0

11已經閱讀了連接執行mysql_real_escape_string之前的SQL。 1在我的處境刮數據,並將它們保存在Poems.csv和寫入到SQL數據庫,我讀了Poem.csv的信息。如何能夠把mysql_real_escape_string 1帖子中提到的第一個函數? – merrill 2012-01-06 05:25:38

+0

數據寫入文件時,您不使用它,你構建你的'$ query'變量時使用它!請閱讀PHP手冊中有關使用這些函數的例子。 – deceze 2012-01-06 05:34:04

+0

在這種情況下,你將如何把它:) – merrill 2012-01-06 09:33:47

3

你應該使用PHP的mysql_real_escape_string功能逃脫你的S特林要插入。

+0

11已經看過,之前連接到SQL執行mysql_real_escape_string。 1在我的處境刮數據,並將它們保存在Poems.csv和寫入到SQL數據庫,我讀了Poem.csv的信息。如何能夠把mysql_real_escape_string 1帖子中提到的第一個函數? – merrill 2012-01-06 05:25:53

+0

您只需調用這個函數在INSERT語句中已建立的連接後,但你運行的語句之前。出。 $查詢= mysql_real_escape_string($查詢);的mysql_query($查詢); – landoncz 2012-01-06 16:19:09

0

這裏是一個函數1遍我所有的數據通過,將其插入我的數據庫之前...

private function makeSqlSafe($data){ 
    $str = @trim($data); 
    if(get_magic_quotes_gpc()){ 
    $data = stripslashes($data); 
    } 
    if(!is_numeric($data)){ 
    $data = "'".mysql_real_escape_string($data)."'"; 
    } 
    return $data; 
} 

希望幫助...

+0

1 1在我的處境已經閱讀了連接執行mysql_real_escape_string之前,SQL 1湊數據,並將它們保存在Poems.csv和寫入SQL數據庫,我讀了Poem.csv怎樣的信息1將能夠把mysql_real_escape_string在帖子中提到的第一個函數? – merrill 2012-01-06 05:25:06

+0

將Magic Quotes處理捆綁到'makeSqlSafe'函數中似乎是一個糟糕的主意。無論第一次觸摸「$ _POST」陣列時數據會發生什麼變化,您都應該去除魔術引用造成的斜槓。如果你想用數據做其他事情*和*把它放在數據庫中怎麼辦?你最終會剝離斜槓兩次(這可能會大大改變數據),或者你必須解決自己造成的問題。另外,不要使用'@'。另外,你從不使用'$ str'。總的來說,這不是一個好的功能。 – deceze 2012-01-06 06:16:44