0

私は、自分で使用するための単純な「小さな」映画カタログ データベース システムを構築しています。現在の問題は、ほとんどの場合は機能しますが、すべてではない mySQL クエリを持っていることです。基本的に、サードパーティの IMDB API を使用して動作します。それを使用して、必要な値を検索して取得しますが、これはうまく機能します。プレビュー画面とすべてに表示されます。私が直面している問題は、ほとんどの映画は機能しますが、一部の映画は機能せず、理由がわかりません。

たとえば、The Fellowship of the Ring は問題なく保存されますが、The Return of the King は単純にクエリを通過しません。違いが見つかりません。

これが私のクエリです:

    $query = "INSERT INTO movies
(title, year, releaseDate, actors, image, runtime, genre, director, rating, watchedDate, category, series, comments, owned, ownedFormat, seen, plot, favorite, uploadDate)
VALUES ('$title', '$year', '$releaseDate', '$actors', '$newImg', '$runtime', '$genre', '$director', '$rating', '$watchedDate', '$category', '$series', '$comments', '$owned', '$ownedFormat', '$seen', '$plot', '$favorite', '$curDate')";

    mysql_query($query) or die ('Error');

他に何を提供する必要があるのか​​ わかりません。映画の何らかの違いがエラーを引き起こしているようですが、わかりません。

ありがとう!

** 編集 ** *

そこで、mysqli に切り替えてみました。これが私の新しいコードです:

    /* Create the prepared statement */
if ($stmt = $mysqli->prepare("INSERT INTO movies (title, year, releaseDate, actors, image, runtime, genre, director, rating, watchedDate, category, series, comments, owned, ownedFormat, seen, plot, favorite, uploadDate) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)")) {

    /* Bind our params */
    $stmt->bind_param('sssssssssssssssssis', $title, $year, $releaseDate, $actors, $newImg, $runtime, $genre, $director, $rating, $watchedDate, $category, $series, $comments, $owned, $ownedFormat, $seen, $plot, $favorite, $curDate);

    /* Execute the prepared Statement */
    $stmt->execute();

    /* Echo results */
    echo "Inserted {$title} into database\n";
}

ただし、次のようなエラーが表示されます: 致命的なエラー: if ステートメントが開始する行の非オブジェクトでメンバー関数 prepare() を呼び出します。

これは、クエリがオブジェクトではないためだと思いますか?

ありがとう

4

2 に答える 2

0

これの最も可能性の高い理由は、生の値を一重引用符で囲んでいることです。値の 1 つに一重引用符が含まれていると、構文エラーが発生します。

必要なことを行うためのより良い方法は、パラメーターをバインドすることです。詳細については、こちらをご覧ください。

于 2013-02-06T03:16:07.830 に答える
-1

実際に返される値に関する詳細情報がなければ、なんとも言えません。戻り値には、セミコロンや引用符など、コードを壊す文字が含まれている可能性があります。正規表現を使用して、英数字以外のすべての文字を削除してみてください。

$result = preg_replace("/[^a-zA-Z0-9]+/", "", $s);

そして、SQL インジェクションの脆弱性があります。廃止された mysql 関数の代わりに PDO を使用することを検討してください。

http://php.net/manual/en/book.pdo.php

于 2013-02-06T03:18:43.463 に答える