0

指定されたデータベースに挿入するデータを取得しようとしていますが、うまくいきません。手動で試した例とそのすべてを見てきましたが、データをデータベースに渡すことができませんが、echo / print_r / var_dumpできるので、データがあることがわかります。これが私のコードです:

public function insertJson($url, $subId)
    {

        $json_file = file_get_contents(KHAN_BASE.$url.'/videos');
        if(isset($json_file))
        {
            $json_decoded = json_decode($json_file, true);
        }else{
            $this->error = 'A valid JSON file was not specified';
        }

       // var_dump($json_decoded); <--- This return all of the data needed from the json pull so i know I have data

        //m3u8, mp4, png,
        //". $row['m3u8'] .",". $row['mp4'] .",". $row['png'] .",
        foreach($json_decoded as $row)
        {
            //echo $row['backup_timestamp'].'<br/>';  <--- This outputs the correct information so I know I can access it that way

            $sql = "INSERT INTO tbl_khan_videos (sub_subject_id, backup_timestamp, date_added, description,
            duration, extra_properties, has_questions, ka_url, keywords, kind, position, readable_id, relative_url, title, url, views, 
            youtube_id) VALUES (:subid, :backup_timestamp, :date_added, :description, :duration, :extra_properties, :has_questions, :ka_url, :keywords, :kind, :position,
            :readable_id, :relative_url, :title, :url, :views, :youtube_id)";
            $stmt = $this->db->prepare($sql);
                $stmt->bindValue(":subid", $subId);
                $stmt->bindValue(":backup_timestamp",  $row['backup_timestamp']);
                $stmt->bindValue(":date_added", $row['date_added']);
                $stmt->bindValue(":description", $row['description']);
                $stmt->bindValue(":duration", $row['duration']);
                $stmt->bindValue(":extra_properties", $row['extra_properties']);
                $stmt->bindValue(":has_questions", $row['has_questions']);
                $stmt->bindValue(":ka_url", $row['ka_url']);
                $stmt->bindValue(":keywords", $row['keywords']);
                $stmt->bindValue(":kind", $row['kind']);
                $stmt->bindValue(":position", $row['position']);
                $stmt->bindValue(":readable_id", $row['readable_id']);
                $stmt->bindValue(":relative_url", $row['relative_url']);
                $stmt->bindValue(":title", $row['title']);
                $stmt->bindValue(":url", $row['url']);
                $stmt->bindValue(":views", $row['views']);
                $stmt->bindValue(":youtube_id", $row['youtube_id']); 
            $stmt->execute();

        }  
    }

何が間違っているのかわかりません。配列としてバインドしようとしましたが(例:) $array = array(':subId' => $subId); $stmt->execute($array);、データベースにデータが届きません。$this->dbすでに入力されている他の形式のデータをプルできるので、の構成が適切であることはわかっています。どんな助けでも大歓迎です。

4

1 に答える 1

1

私はここでのアドバイスのいくつかを通して私の問題を理解しました。何が起こっていたのかというと、null値をバインドしようとしていたので、bindValueによってエラーが発生せずに実行が実行されます。簡単な修正は、nullのフィールドに値を設定できるifステートメントをいくつか使用してforeachループを介してこれを行うことでした。これでエラーが解決しました。解決策を見つけるための正しい道を歩もうとした人々に改めて感謝します。

于 2012-08-04T08:02:25.673 に答える