0

DOM Parserを使用して、友人のバスケットボール Web サイトから記事のリンクを解析しています。これらの値をデータベースに保存したいのですが、構文エラーが発生します コードは次のとおりです。

<?php
include_once ('connect_to_mysql.php');
    include_once ('simple_html_dom.php');
    $html = file_get_html('http://basket-planet.com/ru/');
    $main = $html->find('div[class=mainBlock]', 0);
    $items = array();
        foreach ($main->find('a') as $m){
            $items[] = "$m->plaintext, $m->href";
        }
    //print_r($items);
    $reverse = array_reverse($items);
    print_r($reverse);

    $sql = mysql_query ("INSERT INTO basket_news (article, link) VALUES ".(implode(',', $reverse))."") or die (mysql_error());
?>

これは逆配列からの出力です (申し訳ありませんが、別の言語です)。

Array (
  [0] => 07:43 Видео. Дэвид Стерн и арбитры вручают "Лейкерс" победу над "Миннесотой" (1) , /ru/news/9234
  [1] => 07:51 "Чикаго" прервал победную серию "Майами" на отметке 27 (0) , /ru/news/9235
  [2] => 15:02 Кабмин выделил 200 млн грн на подготовку к Евробаскету (0) , /ru/news/9243
  [3] => 20:42 Евролига: ЦСКА ломает мадридский «Реал» (0) , /ru/news/9246
  [4] => 21:45 «Уникаха» побеждает в Стамбуле и молится на «Бамберг» (0) , /ru/news/9248 )

そして、ここにエラーがあります:

You have an error in your SQL syntax; check the manual that corresponds to your 
MySQL server version for the right syntax to use near 
'07:43 Видео. Дэвид Стерн и ' at line 1

ここで何が間違っていますか?お知らせ下さい...

4

2 に答える 2

2

への変更:

foreach ($main->find('a') as $m)
{
  $items[] = "'$m->plaintext', '$m->href'";
}

"INSERT INTO basket_news (article, link) VALUES (" . implode('), (', $reverse) . ")"

また、必ず入力をエスケープしてください (または、準備済みステートメントを使用するのが理想的です)。

于 2013-03-28T22:01:23.380 に答える
0

文字列は引用符で区切られておらず、コード内でエスケープされていません。Values 文字列は含まれ(ている必要があり) ます。したがって、mysql を使用する場合の正しい方法は次のとおりです。

  $items[] = "('".mysql_real_escape_string($m->plaintext)."','".
                  mysql_real_escape_string($m->href)."')";

mysqliそして、他のコメンターが言ったように、試してみるべきPDOです. クエリの作成は、関数よりも簡単で安全ですmysql_*。(また、mysql_*関数は PHP の次のバージョンで非推奨になります)

于 2013-03-28T22:01:34.890 に答える