mysql查询有时会工作,但并非总是如此

时间:2013-02-06 02:59:50

标签: php mysql database

我正在构建一个简单的“小”电影编目数据库系统供我自己使用。现在的问题是我有一个mySQL查询,它在大部分时间都有效,但不是全部。基本上它通过使用第三方IMDB API工作。我使用它来搜索和拉取我需要的值,这很正常。它显示在我的预览屏幕和所有内容上。我遇到的问题是,虽然大多数电影都有效,但有些人却没有,我无法弄清楚原因。

例如,The Ring 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()。

我假设这是因为我的查询不是对象?

由于

2 个答案:

答案 0 :(得分:0)

最可能的原因是您将原始值放在单引号之间。如果其中一个值中包含单引号,则会出现语法错误。

更好的方法来做你想要的是通过绑定参数。您可以阅读有关here的更多信息。

答案 1 :(得分:-1)

如果没有关于实际返回值的更多信息,很难说。返回的值可能包含一个破坏代码的字符,例如分号或引号。尝试使用正则表达式删除所有非字母数字字符。

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

你有一个SQL注入漏洞。考虑使用PDO而不是使用不受欢迎的mysql函数。

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