【问题标题】:Not able to insert data in new column无法在新列中插入数据
【发布时间】:2013-05-04 15:06:45
【问题描述】:

我现在有可以正确插入数据的工作代码。我正在尝试在其中添加新的 movie_Id 列。我正在尝试从 XML 中获取电影 id 值并将其与电影标题一起循环,但目前插入的数据不正确。 movie_name 对象有 3-4 个电影名称。我正在尝试添加电影 ID。

$movie_name = $arrTitle[0];
    $xml = simplexml_load_file("http://api.themoviedb.org/2.1/Movie.search/en/xml/myapi/$movie_name");
        foreach($xml->movies->movie as $movies){
      $arrMovie_id= $movies->id;
      }
      $movie_ids= $arrMovie_id[0];
    $arrStr = explode(':',$htmlShowTime);
    $release = substr($arrStr[3],0,strlen($arrStr[3])-8);
    $director = substr($arrStr[5],0,strlen($arrStr[5])-11); 

    $sql_movie = "insert into jos_movie(movie_name,language,cast,movie_release,director,rating,rating_count,movie_ids)values('$movie_name','null','$cast','$release','$director',250,230,'$movie_ids')";

这是完整的工作代码

<?php
// Include the handy XML data extraction functions.
include 'xml_regex.php';
include 'simple_html_dom.php';

$con    =   mysql_connect('localhost','test','test');
mysql_select_db('test',$con);


// Use cURL to get the RSS feed into a PHP string variable.
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,'mytest.xml');
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$xml = curl_exec($ch);
curl_close($ch);

$arrData = array();
// Create an array of item elements from the XML feed.
$news_items = element_set('item', $xml);
$del_movie = "delete from jos_movie";
mysql_query($del_movie);

$del_cinema = "delete from jos_cinema";
mysql_query($del_cinema);

foreach($news_items as $item) {
    $title = value_in('title', $item);
    $url = value_in('link', $item);
    $cast = value_in('description', $item);
    //curl_setopt($ch, CURLOPT_URL,$url);
    //curl_setopt($ch, CURLOPT_HEADER, false);
    //curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    //$html = curl_exec($ch);
    $arrTitle = explode('-',$title);
    $html = file_get_html($url);
    $htmlShowTime = '';

    // find all span tags with class=gb1 moviTimes moviTmngBox
    foreach($html->find('ul[style=line-height:2em;]') as $e)
        $htmlShowTime = $e->plaintext;

    $movie_name = $arrTitle[0];
    $arrStr = explode(':',$htmlShowTime);
    $release = substr($arrStr[3],0,strlen($arrStr[3])-8);
    $director = substr($arrStr[5],0,strlen($arrStr[5])-11); 

    $sql_movie = "insert into jos_movie(movie_name,language,cast,movie_release,director,rating,rating_count)values('$movie_name','null','$cast','$release','$director',250,230)";
    //echo $sql.'<br>';
    //echo $sql_movie;

    mysql_query($sql_movie);

    $sqlCount = 'select max(id) from jos_movie';
    $data = mysql_query($sqlCount);
    echo $data;
    print_r($data);
    $result = mysql_fetch_array($data);
    $id = $result[0];
    echo '<br>'.$id.'<br>'; 

    //$id = mysql_insert_id();
    //echo $id;

        // find all span tags with class=gb1
    foreach($html->find('div.moviTmngBox') as $e){
        $tagTitle =  $e->find('a',0);
        $tagTime  = $e->find('div.moviTimes',0);
        $name = $tagTitle->title;
        $time = $tagTime->innertext;

    $trimName = '';
    $temName = strtolower(str_replace(' ','',$name));

    if(strpos($temName,'indraaudi1') !== false)
      $trimName = 'Indra Audi 1' and  $cinemaId = '1' and $long='32.726602' and $lat='74.857026';
    elseif(strpos($temName,'indraaudi2') !== false)
     $trimName = 'Indra Audi 2' and $cinemaId = '2'and $long='32.726602' and $lat='74.857026';
    elseif(strpos($temName,'indraaudi3') !== false)
      $trimName = 'Indra Audi 3'and $cinemaId = '3' and $long='32.726602' and $lat='74.857026';
    elseif(strpos($temName,'apsra') !== false)
      $trimName = 'Apsra' and $cinemaId = '4' and $long='32.700314' and $lat='74.858023';
    else{
        $trimName = trim(substr($name,18,strlen($name))) and $cinemaId = '5' and $long='32.7300' and $lat='74.8700' ;
    }

        //echo $tagTime->innertext.'<br/>';
        $sql = "insert into jos_cinema(cinema_name,show_time,movie_id,cinemaId,logitude,latitude)values('$trimName','$time',$id,$cinemaId,$long,$lat)";
        //echo $sql.'<br/>';
        mysql_query($sql);
        //$arrTem = array($tagTitle->title,$tagTime->innertext);

    }

}//end rss feed loop

?>

这是我的要求。

我将 $movie_name 中的电影名称作为数组获取 我已将名称附加到 xml,以便可以从中获取 moviedbId。我成功获得了movieID。我想将该movieDB ID 插入到相应的电影中。

请告诉我哪里错了。

【问题讨论】:

  • 首先,您使用的是字符串插值而不是准备。 (下一个最好的方法是使用转义)。如果由于它不是 HTTPS 并且您的站点代码在 SO 上而导致其上的服务器最终被 MITM 处理,该怎么办?此外,每当您发布代码时,请使其完整。我们不知道$htmlShowTime 在哪里。此外,空白是免费的。使用它!
  • @Hiroto 它只是代码的一部分,它正在工作。我在代码中添加了一个新部分来添加movieID列。

标签: php sql xml


【解决方案1】:

试试这个:

<?php

$sql = "";
foreach ($arrTitle as $movie_name) { 
    $xml = simplexml_load_file("http://api.themoviedb.org/2.1/Movie.search/en/xml/myapi/$movie_name");
    foreach ($xml->movies->movie as $movies) {
        $arrMovie_id = $movies->id;
    }
    $movie_ids = $arrMovie_id[0];
    $arrStr    = explode(':', $htmlShowTime);
    $release   = substr($arrStr[3], 0, strlen($arrStr[3]) - 8);
    $director  = substr($arrStr[5], 0, strlen($arrStr[5]) - 11);
    $sql .= "('$movie_name','null','$cast','$release','$director',250,230,'$movie_ids'),";
}
$sql       = substr($sql, 0, -1);
$sql_movie = "INSERT INTO `jos_movie`(`movie_name`,`language`,`cast`,`movie_release`,`director`,`rating`,`rating_count`,`movie_ids`) VALUES" . $sql;

?>

【讨论】:

  • 它只是整个代码的一部分。如果您看到我正在获取电影名称。我在 xml 中附加电影名称,以便我也可以附加 movieDb 电影 ID。
  • 我遍历了原始数组。在 foreach 结束时,您现在可以在一行中完成整个查询。
  • 谢谢@David 我回显了它显示的 $movieids 44425 44425。movie_name 数组中的任何电影的 id 都不正确,它回显了两次 :(
  • 您可以编辑您的帖子以显示一个工作示例吗?我可以看到它正在搜索一部电影并简单地选择它看到的第一部电影(索引)。
  • I am getting the movieID successfully. -- I echoed the $movieids..None of the id is correct -- 对不起,我很困惑。您是否正确获取了 ID?
猜你喜欢
  • 1970-01-01
  • 2017-05-17
  • 2018-03-04
  • 1970-01-01
  • 2019-12-30
  • 1970-01-01
  • 1970-01-01
  • 2020-01-10
  • 1970-01-01
相关资源
最近更新 更多