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_*()
のコンテキストに配置します すでにおなじみのAPIです。