2014-07-14 75 views
0

这里是我下面的代码:为什么我的PDO :: FETCH语句返回0?

$barcode = $_POST['barcode']; 
$year = $_POST['year']; 
$movietitle = $_POST['movietitle']; 
$stmt = $pdo->prepare("SELECT COUNT(movietitle) FROM movies WHERE movietitle LIKE '%:movie%'"); 
$stmt->bindParam(':movie', $movietitle); 
$stmt->execute(); 
$fetch = $stmt->fetch(); 
if($fetch[0] == 0) {  
    $displaytitle = $_POST['displaytitle']; 
    $media = $_POST['media']; 
    $youtube = $_POST['youtube']; 
    $genre = $_POST['genre']; 
    $youtube = "www.youtube.com/embed/" . $youtube; 
    $stmtins = $pdo->prepare("INSERT INTO `movies` VALUES (null, :genre, :movietitle, :displaytitle, :year, :youtube, :media, :barcode)"); 
    $stmtins->bindParam(':genre', $genre); 
    $stmtins->bindParam(':movietitle', $movietitle); 
    $stmtins->bindParam(':displaytitle', $displaytitle); 
    $stmtins->bindParam(':year', $year); 
    $stmtins->bindParam(':youtube', $youtube); 
    $stmtins->bindParam(':media', $media); 
    $stmtins->bindParam(':barcode', $barcode); 
    $stmtins->execute(); 
    $message = "The movie was added to your database. - $fetch[0]"; 
} else { 
    $message = "Already owned."; 
} 

每次它的运行时间,$取[0]总是返回0,尽管$语句查询返回大于0以上这是怎么回事?

回答

1

我建议你在异常模式下运行PDO ...

$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

,那么你会看到查询错误。

问题是,你不能像你在LIKE比较中那样使用插值参数。试试这个...

"SELECT COUNT(movietitle) FROM movies WHERE movietitle LIKE CONCAT('%', :movie, '%')" 

还有一个更简单的方法来检查它是否存在...

$stmt = $pdo->prepare("SELECT 1 FROM movies WHERE movietitle LIKE CONCAT('%', :movie, '%')"); 
$stmt->bindParam(':movie', $movietitle); 
$stmt->execute(); 
if(!$stmt->fetch()) { 
    // fetch will return false if there are no rows 
+0

干杯!我可以发誓我以前就这样做过。无论哪种方式,谢谢! – user2416047