Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Obter diferença de data


É importante desenvolver suas consultas MySQL e aperfeiçoá-las primeiro fora do contexto do código PHP e, em seguida, integrar a consulta quando estiver funcionando da maneira que você precisa para em um aplicativo cliente MySQL como MySQL Workbench, PHPMyAdmin, etc.

Em sua consulta, o SELECT externo não é necessário, e a própria consulta interna parece quase correta, mas é a maneira como você tenta executá-la com o PDO que está com defeito.
SELECT
  due_date,
  date_paid,
  DATEDIFF(due_date, date_paid) as date_interval
FROM $tbl_name
WHERE
  DATEDIFF(due_date, date_paid) <= $setDay
ORDER BY trans_id DESC
LIMIT $start, $limit

Agora para executá-lo no PDO, você deve usar prepare()/bindParam()/execute() para criar uma instrução preparada, vincular parâmetros e executá-la com esses parâmetros (você não pode vincular o nome da tabela - isso deve permanecer uma variável). Em seu código atual, você tem uma mistura do PDO::query() método usado para consultas estáticas simples e o PDOStatement::execute() método que é usado para executar uma instrução preparada. Você deve usar o método de instrução preparado, em vez de query() .
// Setup the statement with named parameters like :setDay
$sql = "
    SELECT
      due_date,
      date_paid,
      DATEDIFF(due_date, date_paid) as date_interval
    FROM $tbl_name
    WHERE
      DATEDIFF(due_date, date_paid) <= :setDay
    ORDER BY trans_id DESC
    LIMIT :start, :limit
";
// Make PDO throw useful errors on failure
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

// Prepare the statement
$stmt = $pdo->prepare($sql);

// Bind your 3 parameters and execute it
$stmt->bindParam(':setDay', $setDay, PDO::PARAM_INT);
$stmt->bindParam(':start', $start, PDO::PARAM_INT);
$stmt->bindParam(':limit', $limit, PDO::PARAM_INT);
$stmt->execute();

// Fetch your rows returned from the query
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
// Do something with them
print_r($rows);

Eu sempre recomendo passar um tempo com este tutorial PDO para desenvolvedores MySQL que coloca o uso do PDO no contexto do antigo mysql_*() API com a qual você já deve estar familiarizado.