2013-09-01 5 views
0

말 그대로 시간 인터넷 검색 및 검색과 내가 잘못 뭘하는지 모를 썼다. POST를 사용하고 phpMyAdmin에서 직접 쿼리를 시도했지만 작동했지만 PDO에서는 작동하지 않습니다. 이유를 모르겠습니다. 그것은 mysql_query를 사용할 때 효과적 이었지만 SQL 인젝션으로부터 자신을 보호하고 싶습니다.준비 PDO 쿼리는 0을 반환 영향을받는 행

는 여기에 내가 사용하고 코드입니다 :

<?php 
    if(isset($_POST['user']) and isset($_POST['pass'])) { 
     $name = $_POST['user']; 
     $pass = $_POST['pass']; 

     $db = new PDO('mysql:host=localhost;dbname=*****;charset=utf8', '*****', '*****'); 
     $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

     $query = $db->prepare("SELECT * FROM stored WHERE _User LIKE :username AND _Pass LIKE :password"); 
     $query->bindValue(":username", $user, PDO::PARAM_STR); 
     $query->bindValue(":password", $pass, PDO::PARAM_STR); 

     $query->execute(); 

     echo $query->rowCount(); 
    } 
?> 
+0

'대부분의 데이터베이스에서 PDOStatement :: rowCount()는 SELECT 문의 영향을받는 행 수를 반환하지 않습니다. 대신 PDO :: query()를 사용하여 원하는 SELECT 문과 동일한 조건자를 사용하여 SELECT COUNT (*) 문을 실행 한 다음 PDOStatement :: fetchColumn()을 사용하여 반환 할 행 수를 검색하십시오. 그런 다음 응용 프로그램은 올바른 동작을 수행 할 수 있습니다. 'http://php.net/manual/en/pdostatement.rowcount.php –

+0

코드를 복사하십시오. 여러분이 쉽게 당신을 도울 수 있도록하십시오 : – Fluffeh

+0

다른 모든 것을 제외하고 질문, ** 지구상에서 문자열 비교를 위해 LIKE를 사용하는 아이디어를 얻었습니까? ** –

답변

0

어느 쪽이든 당신은 PHP의 고대 버전을 사용하거나 기준에 일치하는 데이터베이스에 행이 없습니다. 먼저 업그레이드하고 데이터를 확인하고 두 번째 데이터를 쿼리하십시오.

또한, 우리에게 거룩한 리누스가 말한 것처럼 "대화는 저렴합니다. 코드를 보여주십시오".
"내가 어쩌구 저쩌구를 사용했을 때 작동했습니다."라고 말하지 마십시오. 실행하십시오. 아주 똑같은 파일에서이 코드 바로 옆. 이렇게하면 증빙을 얻게됩니다. 귀하의 추측은 그렇지 않지만 그러한 증거 만 중요합니다.

그러나 엄밀히 말하자면, 당신은이 모든 기능이 필요하지 않습니다,뿐만 아니라 당신의 대부분의 코드로

$stmt = $db->prepare("SELECT 1 FROM stored WHERE _User = ? AND _Pass = ?"); 
$stmt->execute(array($_POST['user'],$_POST['pass'])); 
echo $stmt->fetchColumn(); 

은 충분하다.

+0

어떻게 업그레이드하나요? 내 웹 호스트에 문의 하시겠습니까? 이미 쿼리를 테스트했으며 phpMyAdmin에서 작동했습니다. http://i.imgur.com/iUqUrMW.png –

+0

업그레이드하기 전에 문제가 있는지 알아야합니다. 모든 행동은 단순한 가정에 기초합니다. 왜 스스로 문제를 이해하지 못하고 해결책을 찾기 시작하지 않습니까? –

+0

어쨌든, 그것은 오류보고 부족으로 인한 바보 같은 오타가되었습니다. –

1

행 41에서 사용자 이름 변수 $ name의 이름을 지정하는 것처럼 보이지만 행 46에서 매개 변수를 바인딩하면 $ user라고 부릅니다.

+0

글쎄, 나는 지체되었다. 그게 너야 천재 야. 나는 일관성을 유지하는데 더주의를 기울여야한다고 생각합니다. 내 잘못이었던 것을 찾기 위해 힘든 시간을 보냈던 많은 시간을 끝내 주신 것에 대해 감사드립니다. 나는 마침내 잠들 수 있습니다. 다시 한번 감사드립니다. –

+0

@TidasBay 간단한 'error_reporting (E_ALL);'이 모든 시간을 절약 할 수 있습니다. –

+0

나는 그것도 조사 할 것이다. 감사! –