2016-12-02 98 views
0

我试图从The Movie Database获取一些数据,使用library在本地使用Xampp在数据库中插入结果。我知道它是脏的(全局函数等),但我在本地运行 - 我只需要它将数据写入数据库如果有任何有效的数据,或重新运行功能如果不是。函数没有写入数据库?

require_once '../vendor/autoload.php'; 

$token = new \Tmdb\ApiToken('My API Key - removed'); 
$client = new \Tmdb\Client($token); 
$mid = 1; 
$conn = new mysqli('localhost', 'root', '', 'test'); 
// Check connection 
if ($conn->connect_error) { 
    die("Connection failed: " . $conn->connect_error); 
} 

moviedetails(); 

function moviedetails() { 

    global $token; 
    global $client; 
    global $mid; 
    global $conn; 

    $repository = new \Tmdb\Repository\MovieRepository($client); 
    $movie = $client->getMoviesApi()->getMovie($mid); 

    var_dump($movie); 

     $votecount = $movie['vote_count']; 
     $voteaverage = $movie['vote_average']; 
     $image = $movie['poster_path']; 
     $releasedate = $movie['release_date']; 
     $id = $movie['id']; 
     $title = $movie['title']; 
     $description = $movie['overview']; 

     $sql = "INSERT INTO movie (votes, vote_average, poster, release_date, dbid, title, description) 
     VALUES ('$votecount', '$voteaverage', '$image', '$releasedate', '$id', '$title', '$description')"; 

     echo $mid; 

     $mid++; 
     moviedetails(); 

} 

我的脚本在$mid = 3时失败,但未将其他两个有效条目写入我的数据库。

+1

这可能是一个引用问题。保存你的头痛,并切换到[预先准备的语句](http://php.net/manual/en/mysqli.quickstart.prepared-statements.php)和[bind_param](http://php.net/manual/ EN/mysqli的-stmt.bind-param.php)。另外,我没有看到你实际将sql插入数据库的位置。 – aynber

+0

您不是有效地插入到数据库中,而只是准备好执行查询,则不会执行该查询。 – coderodour

回答

1

如果您没有有效地插入到数据库中,只是准备好了查询,则不会执行该查询。

您需要$conn->query($sql)在您的$sql = "query"之后。

+0

为此欢呼,在相当长的一段时间里还没有使用过PHP – PublicDisplayName

+0

很高兴我能帮上忙,并且确保你已经适应了php中的最新实践(因为更旧的实践被发现是不安全的和/或正在迅速变为贬值),我还建议您学习并根据您的所有需求使用准备好的语句,正如aynber在上面评论中提到的一个指向资源的链接。 – coderodour

+0

你好,谢谢你的关注。我将使用准备好的语句生成代码,但是这是在使用Xampp进行样本测试的虚拟机中运行的 - 我不关心数据是否发生变化,因为它是新的数据库。但我同意,并感谢关心! – PublicDisplayName

0

Global $ mid。也必须在顶级scrpit。