0

サイトのデータベースに 10,000 ページを保存したいと考えています。

ファイルを実行すると、すべてのページでこのエラーが発生します。

SQL 構文にエラーがあります。'_trackPageLoadTime']);(function() {var ga = document.createElement("script"); ga' at line 1付近で使用する正しい構文については、MySQLサーバーのバージョンに対応するマニュアルを確認してください。

エラーの原因となっている文字がいくつかあると思います。

保存されたb.php

<?php 
include "conexao.php";

for ($nr=1; $nr<=10000; $nr++){
    $url = "http://www.site.com/u$nr";
    $html = file_get_contents($url);

    set_time_limit(120);

    $tabela_bd = "paginas";

    $sql = mysql_query("INSERT INTO $tabela_bd(html) VALUES('$html')");
    if ($sql) {echo "Cadastrado com sucesso!!";
} else {
echo "Falha ao cadastrar.".mysql_error();
}

}

?>

@edit 文字に関する問題は解決しましたが、一部のテーブルがコンテンツなしで保存されています。

4

5 に答える 5

3

非推奨の mysql_* 関数を使用しないでください。代わりに mysqli_* 関数を使用してください。

さらによいのは、プレースホルダーの使用をサポートする PDO などの抽象化ライブラリーを使用することです。これにより、必要に応じてエスケープが自動的に適用されます。見る:

http://php.net/manual/en/book.pdo.php

プレースホルダーの使用例:

http://www.php.net/manual/en/pdo.prepare.php

あなたの場合、おそらくこれ:

$stmt = $pdo->prepare("insert into $tabela_bd( html ) values ( :html )");
$stmt->bindValue('html', $html);
$stmt->execute();
于 2013-02-02T17:22:18.080 に答える
1

\あなたのファイルには、やなどのエスケープ文字が含まれているよう;です。これらの文字がクエリに干渉しないようにする必要があります。

これを使って

$html = mysql_real_escape_string($html);
$sql = mysql_query("INSERT INTO $tabela_bd(html) VALUES('$html')");
于 2013-02-02T17:17:36.710 に答える
0

以下に示すように、状況に 応じてmysql_real_escape_stringを使用する必要があります。

<?php 
include "conexao.php";

for ($nr=1; $nr<=10000; $nr++){
    $url = "http://www.power-pixel.net/u$nr";
    $html = file_get_contents($url);

    // escape the string
    $html = mysql_real_escape_string($html);

    set_time_limit(120);

    $tabela_bd = "paginas";

    $sql = mysql_query("INSERT INTO $tabela_bd(html) VALUES('$html')");
    if ($sql) {
      echo "Cadastrado com sucesso!!";

    } else {
      echo "Falha ao cadastrar.".mysql_error();
    }

}

?>
于 2013-02-02T17:20:11.727 に答える
0

HTMLの特殊文字をエスケープしていません。mysql_escape などを試してください。

于 2013-02-02T17:16:22.687 に答える
0

$html 変数をエスケープする必要があります。

$sql = mysql_query("INSERT INTO $tabela_bd(html) VALUES('" . mysql_real_escape_string($html) . "')");
于 2013-02-02T17:17:12.973 に答える