sql >> データベース >  >> RDS >> Mysql

日付の違いを取得する

    MySQLクエリを開発し、最初にPHPコードのコンテキスト外で完成させてから、MySQLクライアントアプリケーションで必要な方法でクエリが機能するようになったら、クエリを統合することが重要です。 MySQL Workbench、PHPMyAdminなど

    クエリでは、外側のSELECT は不要であり、内部クエリ自体はほぼ正しいように見えますが、PDOを使用して実行しようとする方法に問題があります。

    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
    

    PDOで実行するには、 prepare()/bindParam()/execute() プリペアドステートメントを作成し、パラメーターをバインドして、それらのパラメーターを使用して実行します(ただし、テーブル名をバインドすることはできません。これは変数のままである必要があります)。現在のコードでは、PDO::query()が混同されています 単純な静的クエリとPDOStatement::execute()に使用されるメソッド プリペアドステートメントを実行するために使用されるメソッド。 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);
    

    私は常にMySQL開発者向けのこのPDOチュートリアル で時間を過ごすことをお勧めします。 これは、PDOの使用法を古いmysql_*()のコンテキストに配置します すでにおなじみのAPIです。



    1. Postgresql関数の実行プロセス

    2. 別の結果列の式で結果列を再利用する方法

    3. VB.NET2008プロジェクトからMySQLデータベースにアクセスする

    4. mysql:varchar値を分割してパーツを挿入