2012-04-17 51 views
0

我已經有數據從網絡表中抓取,我注意到一些條目中有一些前導空格和nbsp。我意識到在插入MySQL之前,我應該先清理數據,但之前我不想重複這個過程,如果我不需要的話。我昨晚想出了這個PHP腳本(後期),直到我嘗試更新條目爲止。將MySQL字符串數據清理爲純文本並修剪開始/結束空間的最佳方法?

<?php 
require_once("login.php"); 

$db_server = mysql_connect($db_hostname, $db_username, $db_password); 
if (!$db_server) die("Unable to connect to MySQL: " . mysql_error()); 

mysql_select_db($db_database); 

$query = "SELECT * FROM ingredients;"; 

$result = mysql_query($query); 
$i = 1; 
$e = array(); 
while ($row = mysql_fetch_array($result, MYSQL_NUM)) { 
    //echo $row[1]; 
    $str = trim(mysql_real_escape_string($row[1])); 
    $e[] = $str; 
    $i++; 

} 

//print_r($e); 
/* 
$i = 1; 
foreach($e as $entry) { 
    $query = "UPDATE ingredients 
     SET ing_name = $entry 
     WHERE ing_id = $i;"; 
    mysql_query($query); 
    $i++; 
}*/ 
?> 

幾個問題:

  1. 有沒有辦法做到這一點嚴格的MySQL不使用PHP?
  2. 我應該使用什麼函數去除字符串以便轉換爲明文並刪除所有前導空格,尾隨空格和nbsp空格?
  3. PHP腳本似乎工作,直到更新數據,什麼給?

感謝

回答

3

有大量的MySQL String Functions可以幫助這種事情。

您可能需要的REPLACETRIM的組合來清理:

UPDATE table SET column=TRIM(REPLACE(column, '&nbsp;', ' ')) 

也儘量不要使用mysql_query,但使用PDO代替。直接編寫查詢會讓您暴露於SQL注入問題。

+0

1我錯過了更換部件。 – 2012-04-17 14:40:44

+0

接受這個是因爲我不確定TRIM是否會刪除nbsp。很好的解決方案,謝謝 – pdizz 2012-04-17 14:55:01

3

我認爲這將與SQL查詢爲你做嚴格:

UPDATE ingredients SET column_with_spaces = TRIM(column_with_spaces) 

至於未來的拼搶去,插入數據庫之前使用trim()

0
//The PHP keyword <b>strtr()</b> is much easier to understand: <br> 
$query = "SELECT * FROM ingredients";<br> 
$query= strtr($isql, array('&nbsp~;' => ' ')) ; //without the ~<br> 
//Converts all HTML spaces back to white spaces for MySQL to understand.<br> 
//Useful when you load data onto textboxes:<br> 
//Let's say you have a surname Van Der Merwe with white spaces.<br> 
//To edit the surname we need to put it into an input textbox:<br> 
$DBConnect = new mysqli("localhost", "root","Userpassword", "DBName");<br> 

對於聯想陣列:

if ($result = mysqli_query($DBConnect, $query)) {<br> 
    while ($row = mysqli_fetch_assoc($result)) {<br><br> 
echo "<>input type='text' name='Surname' size='45' value=";<br> 
echo <b>strtr</b>($row['Surname'], array(' ' => '&nbs#p;')) ;//remove the # "<br> 
echo ">";<br><br> 

對於非關聯數組:

if ($result = $DBConnect->query($SQLstring)) {<br> 
    while ($row = $result->fetch_row()) {<br> 
echo "<dd><>input type='text' name='Surname' size='45' value=";<br> 
echo <b>strtr</b>($row[2], array(' ' => '&nbsp#;')) ; //remove the #<br> 
echo ">";<br> 
相關問題