php scrape для записи в ошибку базы данных mysql - PullRequest
0 голосов
/ 06 января 2012

первая функция это

              $output_csv = fopen( "Poems.csv", "w" );
..code here
               $poem_text = trim($pre->innertext);

               $poem_text = str_replace('"','',$poem_text);

               $poem_text = html_entity_decode($poem_text);

               $poem_text = str_replace(array('\\', "\0", "\n", "\r", "\t", "\x1a")," ",$poem_text);
...code here
              $p

    oem_data = array( $author_names[$i], $poem_names[$i], $poem_text, $poem_urls[$i] );
                 fputcsv( $output_csv, $poem_data );   
...code here

последняя функция

function writeQuotestoDb() {
  $input_csv = fopen( "Poems.csv", "r" );
  $author_names = array();
  $poem_names = array();
  $poem_text = array();
  $poem_urls = array();

  while (($columns = fgetcsv($input_csv, 1000, ",")) !== FALSE) {
    array_push( $author_names, $columns[0] );
    array_push( $poem_names,  $columns[1] );
    array_push( $poem_text, $columns[2]);
    array_push( $poem_urls,  $columns[3] );
  }
  fclose( $input_csv );

  //$dbh = mysql_connect( 'localhost', 'poetiv', 'alegado' );
  $dbh = mysql_connect( 'localhost', 'root', '' );
  mysql_select_db( 'test', $dbh );
  mysql_query("CREATE TABLE  IF NOT EXISTS `poem2` (
             `id` INT( 20 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
             `author_name` varchar(128) DEFAULT NULL,
              `poem_name` varchar(128) DEFAULT NULL,
              `poem_text` text,
              `poem_url` varchar(1024) DEFAULT NULL
             ) ENGINE = MYISAM");
    mysql_query("TRUNCATE `poem2`");     
    for ( $i=0; $i<count($author_names); $i++ ) {
        $poems[$i] = substr($poems[$i],7,(strlen($poems[$i])-14));
        $poems[$i] = str_replace('"','',$poems[$i]);
        $query = "insert into poem2 (author_name,poem_name,poem_text,poem_url) values 
        ('" . $author_names[$i] . "', '" . $poem_names[$i]."', '" . $poem_text[$i]."', '" .$poem_urls[$i] ."')";
        if( !mysql_query($query) ) { echo $query; 
            }
        }
    echo count($author_names)." rows....successfully db updated";
    //SELECT count(*) FROM `quotes` WHERE criteria = 'Baby Quotes'
 }

я получаю сообщение об ошибке, подобное этому примеру

Salve magna parens frugum Saturnia Tellus, Magna virm! Тиби Рез antiqu laudis et artis Aggredior, sanctos ausus recludere fontes. Virg. Geor. 2. 1 Пока ты, Господи, сельская тень Восхищаюсь, 2 И из публичных постов Британии выходят на пенсию, 3 ни дольше, ее неблагодарные сыновья, чтобы угодить, 4 В их пользу пожертвуй своей легкостью; 5 Я в чужом мире моя судьба 6 Через народы плодоносные бессмертных лежит, 7 Где мягкое море

В Британии не сбежали

Я не уверен, должно ли это быть '' или \ '

но я хотел бы знать, как решить эту ошибку и иметь возможность завершить запись всех в sql db

Ответы [ 3 ]

3 голосов
/ 06 января 2012

Используйте mysql_real_escape_string для ваших значений перед их подключением к запросу.
А еще лучше, идти в ногу со временем и использовать расширение PDO с подготовленными выписками .

3 голосов
/ 06 января 2012

Вы должны использовать функцию PHP mysql_real_escape_string для экранирования вставляемой строки.

0 голосов
/ 06 января 2012

Вот функция, через которую я передаю все свои данные, прежде чем вставить их в свою базу данных ...

private function makeSqlSafe($data){
  $str = @trim($data);
  if(get_magic_quotes_gpc()){
    $data = stripslashes($data);
  }
  if(!is_numeric($data)){
    $data = "'".mysql_real_escape_string($data)."'";
  }
  return $data;
}

Надеюсь, это поможет ...

...