2015-07-02 28 views
3

您好我有表的「意見」,在這裏有一個名爲「COMMENT_TEXT」字段,我插入註釋這樣的表列值的字符串長度減少了一個當值有報價

$query="insert into `comments` 
    (`id`, 
    `comment_text`, 
    `date`) 
    values 
    ('', 
    '".sprintf("%-70s",mysql_real_escape_string(ucwords(trim($strTitle63_5))))."', 
    '$date')"; 

正如你可以看到我設置註釋長度來修復70個字符(始終原始註釋少於70個字符。)

一切工作正常,除非我插入一個值與報價,如果我插入評論與報價,在數據庫表中,我只能看到69個字符。

例子:

我插入這兩則言論

註釋1: 「扁平率重疊與另一扁平率守則」

註釋2:「索賠詳情不符合BSI/BRI指引」

後來當我嘗試檢查字符串的長度。註釋1爲70,評論2是69.有沒有道理呢?

有報價每一個評論給了我這個問題。 :(。

在此先感謝。

UPDATE

我的代碼

型號

function get_coc5_comment_details() 
{ 
    $this->db->select("comment_text"); 
    $this->db->from("comments"); 
    $result=$this->db->get(); 

    return $result->result_array(); 
} 

控制器

function validate_db() 
{ 
    $result = $this->invoice_model->get_comment_details(); 
    $this->load->view("comment_details_view",array("result"=>$result)); 
} 

視圖

foreach ($result as $row) 
{ 
    $comment = $row['comment_text']; 

    echo strlen($comment)."<br>"; 
} 
+0

你如何檢查的是請字符串長度顯示源代碼。 – gvgvgvijayan

+0

你有一些問題,檢查長度。你提供的代碼沒有這個問題。 –

+0

@gvgvgvijayan,請檢查我的代碼 –

回答

5

一切正常,除非我插入值與報價,如果我插入註釋與報價,數據庫表我只能看到69個字符。

因爲當出現在字符串中報價,然後你通過mysql_real_escape_string運行它,它會在您的字符串:)

這就是一個額外的字符\。一旦進入到數據庫\被刪除,你看69

你爲什麼不考慮預處理語句?

此外,在數據庫中存儲多餘的空格無緣無故所有不好的設計。你可以寫顯示器使用這些時追加額外的空間您的意見,完成70字符長度的包裝方法。我認爲你應該將原始評論存儲在數據庫中。出於某種原因,如果某一天的長度要求變爲75,該怎麼辦?

例如

$str="test"; 
echo str_pad($str, 70,'*'); // This will take it to 70 characters. 
+0

哦,現在我可以做什麼?我正在使用這些值並生成一些報告,如果列的長度被改變,那麼所有的東西都搞亂了:) –

+0

請參閱編輯以找到可能的解決方案。 –

+0

是的,你是正確的,這是一箇舊的代碼庫,以前的開發者已經用這種方式編寫了代碼。我會做你提到的改變。非常感謝你 。 –