2014-07-14 2 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 이상을 반환하는 $ stmt에 쿼리에도 불구하고, 반환?

답변

1

나는

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

그런 다음 쿼리 오류를 볼 것입니다 ... 당신은 예외 모드에서 PDO를 실행하는 것이 좋습니다.

문제는 사용자가 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