2013-08-23 3 views
0

У меня есть $ год и $ месяц, и мне нужно, чтобы выбрать все записи, в которых метка времени после того, как один год/месяц и до другого года/месяцPHP, MySQL - как параметризация временных меток сравнения

WHERE m.id = :magazineId 
     AND t.isChargedBack IS FALSE 
     AND t.`timestamp` >= STR_TO_DATE(:year'-08-01', '%Y-%m-%d') 
     AND t.`timestamp` < STR_TO_DATE('2013-09-01', '%Y-%m-%d') 

Просто для начала я выложил только одну из записей года, и запрос остановил поиск любых строк.

Как можно параметризовать это?

+1

Я думаю, что просто положить, что ': параметр year' перед строка не действительный SQL. Поскольку это строка, к которой вы добавили ее, вы должны ее конкатенировать: 'CONCAT (: year, '-08-01')'. –

ответ

0

ли вы пытаетесь использовать:

`t`.`timestamp` BETWEEN "$DATE1" AND "$DATE2"? 

MySQL Between

Вы также можете попробовать вместо STR_TO_DATE, преобразовывая дату в метку времени

0
$mysqli = new mysqli("host", "user", "password", "world"); 
$mymagazineid = "Foo"; 
$year = "2013"; 

$parameter_clause = <<<EOD 
    SELECT * FROM YourTable 
    WHERE m.id = ? 
    AND t.isChargedBack IS FALSE 
    AND t.`timestamp` >= STR_TO_DATE(?, '%Y-%m-%d') 
    AND t.`timestamp` < STR_TO_DATE('2013-09-01', '%Y-%m-%d') 
EOD; 

$stmt = mysqli_prepare($mysqli, $parameter_clause); 
mysqli_stmt_bind_param($stmt, "ss", $mymagazineid, "$year-08-01"); 
mysqli_stmt_execute($stmt); 
0

попробовать это:

$date1 = strtotime('01-08-$year'); 
$date2 = strtotime('01-09-2013'); 

$query = "SELECT * from your_table WHERE m.id = '{$magazineId}' AND t.isChargedBack IS FALSE 
    AND t.`timestamp` BETWEEN '{$date1}' AND '{$date2}'"; 
0

существу (без параметра PDO ради примера)

PHP

$target = $year . '/' . $month . '/01'; 

SQL

" ... 
WHERE m.id = :magazineId 
AND t.isChargedBack IS FALSE 
AND t.`timestamp` >= '$target' 
AND t.`timestamp` < DATEADD('$target' + 1 MONTH);" 
Смежные вопросы