2

データベース構造:

アニメデータベースのテーブル構造

JSON へのエンコード:

次のコードを使用して、JSON でエンコードされたアニメ情報をテキスト ファイルに保存しています。

        $info = array(
            'mal_id' => $id,
            'image' => $src,
            'title' => $title,
            'alt_title_eng' => $alt_eng,
            'alt_title_syn' => $alt_syn,
            'type' => $type,
            'status' => $status,
            'episodes' => $ep,
            'genres' => $genres,
            'rank' => $rank,
            'synopsis' => $syno,
            'modified' => date("Y-m-d H:i:s"),
            'user' => 'system'
            );
    file_put_contents("scrap/anime-$id.txt", json_encode($info));

テキストファイルの内容は次のとおりです。

{"mal_id":18679,"image":"http:\/\/localhost\/images\/anime\/5\/54379.jpg","title":"Kill la Kill","alt_title_eng":" KILL la KILL","alt_title_syn":" KLK","type":" TV","status":" Currently Airing","episodes":25,"genres":"Action, Comedy, School","rank":421,"synopsis":"The story is set on a high school that the student council president Satsuki Kiryuuin rules by force....","user":"system"}

JSON のデコードとデータベースへの挿入

コンテンツを json_decode して値を mysql に挿入しようとしています。成功せずに作成したコードは次のとおりです。

$id= '18679';
$TABLE_PREFIX = 'exp_';
$dbh = new PDO('mysql:host='.$dbhost.';dbname='.$database.';charset=utf8', $dbuser, $dbpass);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);


$JSON = json_decode(file_get_contents("scrap/anime-$id.txt"));  
$stmt = $dbh->prepare("INSERT INTO {$TABLE_PREFIX}animedb
(mal_id, image, title, alt_title_eng, alt_title_syn, type, status, episodes, genres, rank, synopsis, modified, user)
    values(:mal_id, :image, :title, :alt_title_eng, :alt_title_syn, :type, :status, :episodes, :genres, :rank, :synopsis, :modified, :user)
    on duplicate key update title= :title, image= :image, alt_title_eng= :alt_title_eng, alt_title_syn= :alt_title_syn, status= :status, episodes= :episodes, genres= :genres, rank= :rank, synopsis= :synopsis, modified= :modified, user= :user");

$user = 'system';
$modified = 'NOW()';
$stmt->bindParam(':mal_id', $id);  
$stmt->bindParam(':image', $JSON->image, PDO::PARAM_STR);
$stmt->bindParam(':title', $JSON->title, PDO::PARAM_STR);      
$stmt->bindParam(':alt_title_eng', $JSON->alt_title_eng, PDO::PARAM_STR);     
$stmt->bindParam(':alt_title_syn', $JSON->alt_title_syn, PDO::PARAM_STR);     
$stmt->bindParam(':type', $JSON->type, PDO::PARAM_STR);     
$stmt->bindParam(':status', $JSON->status, PDO::PARAM_STR);     
$stmt->bindParam(':episodes', $JSON->episodes);     
$stmt->bindParam(':genres', $JSON->genres, PDO::PARAM_STR);     
$stmt->bindParam(':rank', $JSON->rank);     
$stmt->bindParam(':synopsis', $JSON->synopsis, PDO::PARAM_STR);     
$stmt->bindParam(':modified', $modified, PDO::PARAM_STR);     
$stmt->bindParam(':user', $user, PDO::PARAM_STR);     
$stmt->execute() ;

問題:

try/catch を使用すると、次のエラーしか表示されません。

SQLSTATE[HY093]: Invalid parameter number

このエラー メッセージの解決策を検索しましたが、問題の適切な解決策が見つかりませんでした。

4

1 に答える 1