Q:

Validação de input com consulta em "tempo real" ao banco de dados, para verificar se a informação já esta cadastrada ou não

Eu gostaria de fazer uma validação de formulário em tempo real.
Por exemplo, eu tenho um input name="TituloFilme" type="text", eu no meu banco de dados eu tenho as seguintes colunas ID | TituloFilme .
Quando eu for cadastrar um novo titulo de filme no banco de dados, eu gostaria que um script associasse o texto no input ao registros no banco de dados. Exemplo:
Caso eu tenha o filme Transformers 1 cadastrado e escreva no input "Transformers 1", quero que apareça uma noticia abaixo do input "Esse filme já está cadastrado", porém caso eu escreva "transformers 2" apareça um alerta assim "Filme ainda não cadastrado".
Gostaria que essa validação fosse em tempo real, tipo, eu acabei de escrever o titulo e passei pra um outro campo do formulário, e ao passar pra outro campo eu gostaria que a consulta fosse iniciada e verificasse se o titulo já está cadastrado ou não.
Tenho esse esse o seguinte exemplo ::
INDEX.PHP
<script src="../../Scripts/jquery.js"></script>
<script language="javascript" src="ajax.js"></script>
<script language="javascript">
  function verificaDuplicidade(valor) { 
    url = "pesquisaUsuario.php?nome=" + valor; // arquivo que pesquisa se o usuario existe
    div = "pesquisaUsuario"; // div com o id "pesquisaUsuario". você pode colocar qualquer nome

    ajax(url, div);
  }
</script>
<div id="pesquisaUsuario"></div>
<br>
<input type=text name=nome id=nome>
<input type=button name=pesquisa onClick="verificaDuplicidade(nome.value)">

AJAX.JS
function ajax(url, div) {
  req = null;
  if (window.XMLHttpRequest) {
    req = new XMLHttpRequest();
    req.onreadystatechange = processReqChange;
    req.open("GET", url, true);
    req.send(null);
  } else if (window.ActiveXObject) {
    req = new ActiveXObject("Microsoft.XMLHTTP");
    if (req) {
      req.onreadystatechange = processReqChange;
      req.open("GET", url, true);
      req.send(null);
    }
  }
}

function processReqChange() {
  if (req.readyState == 4) {
    if (req.status ==200) {
      document.getElementById(div).innerHTML = req.responseText;
    } else{
      alert("Houve um problema ao obter os dados:n" + req.statusText);
    }
  }
}

e a pagina que faz a consulta pesquisaUsuario.php
<?php
  $pdo = new PDO("mysql:host=localhost;dbname=brasiltudoliberado", "root", "");

  if (!$pdo) {
    die('Erro ao criar a conexão');
  }

  if ($_GET["nome"] != "") {
    $consulta = $pdo->prepare("SELECT * FROM posts WHERE TITULO = '".$_GET["nome"]."'");
    $count = count($consulta);

    if ($count == 1) {
      echo "Já existe um Titulo igual ao pesquisado";
    }
    else {
      echo "Não existe";
    }
  }
?>

"Aparentemente" esse modelo funciona, porem ele sempre retorna que existe um titulo igual ao pesquisado, o que não é verdade.
Ah, esse modelo também não faz a validação instantaneamente, é necessário clicar em um botão.

A:

Aparentemente, parece bem simples. Andei pesquisando algumas formas de fazer isso, e encontrei um exemplo muito bom que pode servir. Aqui basicamente assiste enquanto você digita, e espera um tempo de 0.4s a partir do momento que você para de escrever. Se decidir usar o exemplo abaixo, você deve adaptá-lo de alguma maneira para conexões mais lentas.
jQuery
var input = $('input'),
saida = $('.saida');

var DURACAO_DIGITACAO = 400,
    digitando = false,
    tempoUltimaDigitacao;

input.on('input', function () {
    atualiza();
});

function atualiza () {

    if(!digitando) {
       digitando = true;
       saida.html('procurando...');
    }

    tempoUltimaDigitacao = (new Date()).getTime();

    setTimeout(function () {

       var digitacaoTempo = (new Date()).getTime();
       var diferencaTempo = digitacaoTempo - tempoUltimaDigitacao;

       if(diferencaTempo >= DURACAO_DIGITACAO && digitando) {
           digitando = false;
           saida.html('exibe resultado...');
           //aqui você pode chamar a função ajax
       }

   }, DURACAO_DIGITACAO);

}

Demo

