0

Web テーブルからスクレイピングしたデータが既にありますが、いくつかのエントリの先頭にスペースと 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 スクリプトは、データを更新するまでは機能しているようですが、何が得られますか?

ありがとう

4

4 に答える 4

3

これは、SQLクエリを使用して厳密に行うと思います:

UPDATE ingredients SET column_with_spaces = TRIM(column_with_spaces)

将来のスクレイピングに関する限りtrim()、データベースに挿入する前に使用してください。

于 2012-04-17T14:36:04.253 に答える
3

この種の作業に役立つ多数のMySQL 文字列関数があります。

クリーンアップするには、REPLACEとの組み合わせが必要になる場合があります。TRIM

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

また、 を使用せずmysql_query、代わりにPDOを使用してください。クエリを直接記述すると、SQL インジェクションの問題にさらされることになります。

于 2012-04-17T14:37:41.037 に答える
0

文字列のトリミングと置換のための 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#関数_置換

于 2012-04-17T14:40:13.043 に答える
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>
于 2012-12-29T12:51:51.227 に答える