2016-12-02 65 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。