将MySQL字符串数据清理为纯文本并修剪开头/结尾空格的最佳方法


Best way to clean MySQL string data to plaintext and trim beginning/end spaces?

我已经有了从网络表格中抓取的数据,我注意到一些条目中的前导空格和 nbsp。我意识到我应该在将数据插入MySQL之前在抓取数据时清理数据,但那是一段时间前的事了,如果我不必重复该过程,我不想重复该过程。我昨晚想出了这个PHP脚本(晚),它一直工作到我尝试更新条目。

<?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. 有没有办法在不使用PHP的情况下严格在MySQL中做到这一点?
  2. 我应该使用什么函数来去除字符串以转换为纯文本并删除所有前导、尾随和 nbsp 空格?
  3. PHP 脚本似乎在更新数据之前一直有效,什么给了?

谢谢

有大量

的MySQL字符串函数可以帮助解决这类问题。

您可能需要结合使用REPLACETRIM来清理它:

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

也尽量不要使用 mysql_query ,而是使用 PDO。直接编写查询会使您面临 SQL 注入问题。

我认为这将严格使用SQL查询为您完成:

UPDATE ingredients SET column_with_spaces = TRIM(column_with_spaces)

就将来的抓取而言,请在插入数据库之前使用trim()

如果您正在寻找用于字符串修剪和替换的 mysql 解决方案,您应该查看此处的 mysql 字符串函数:

修剪:http://dev.mysql.com/doc/refman/5.5/en/string-functions.html#function_trim替换:http://dev.mysql.com/doc/refman/5.5/en/string-functions.html#function_replace

//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>