2011-09-14 5 views
1

쿼리가 있습니다 :mysql 쿼리에서 변수는 언제 평가됩니까?

$startdate= date('Y-m-d H:i:s',strtotime("-1 week")); 

$query = "SELECT title FROM new_books ". 
     "WHERE timestamp >= '$startdate' "; 
$newbooks = mysql_query($query) or die (mysql_error()); 

$ 쿼리가 설정되거나 mysql_query()에 의해 호출 될 때 $startdate의 값이 평가됩니까?

예를 들어 위의 쿼리가 0 결과 (mysql_num_rows($newbook)==0)를 반환한다고하면 $startdate을 변경 한 다음 $newbooks = mysql_query...을 다시 호출하거나 $query를 다시 설정해야합니까?

+2

제안 당신이

$query_format = "SELECT title FROM new_books WHERE timestamp >= '%s'"; $newbooks = mysql_query(sprintf($query_format, $startdate)) or die (mysql_error()); 

을하여 mysql_query하거나 준비된 문을 사용하도록 통과하기 전에 잠재적으로이 같은 sprintf를 사용할 수) 쿼리로 처리됩니다. 변수는 mysql_query가 호출되기 전에 문자열로 보간되고, 문자열은'$ query'에 할당됩니다. –

답변

3

변수는 $ query가 설정 될 때 평가됩니다.

그것은 정확히이 일을 같은 :

$query = $mysqli->prepare("SELECT title FROM new_books WHERE timestamp >= :startdate"); 

$query->bind_params("s", $startdate); 
$query->execute(); 
... 

$query->bind_params("s", $an_other_startdate); 
$query->execute(); 
... 

의 예를 참조 http://docs.php.net/manual/en/mysqli.prepare.php

에서 : 당신이 prepared statements 사용, 다른 매개 변수와 동일한 쿼리를 여러 번 실행하려면

$query = "SELECT title FROM new_books ". 
     "WHERE timestamp >= '" . $startdate . "' "; 

+0

다음을 사용하는 것이 더 정확하지 않습니까? '$ query-> bind_param ('s', $ startdate); $ startdate = $ date1; $ query-> execute(); ... $ startdate = $ date2; $ query-> execute(); ...' – MichaelRushton

1

큰 따옴표로 묶여 있으므로 설정시 평가됩니다. $ query.

+0

'$ query'를 구성하여 mysql_query로 보내질 때까지 평가되지 않는 방법이 있습니까? – aslum

0

이와 같은 쿼리를 설정하면 @ arnaud576875와 같이 문자열 연결 만 수행하면됩니다. $ startdate 변수를 변경하면 쿼리를 다시 설정해야합니다.

그것은, 그것이하여 mysql_query에 전달되는 PHP는 문자열 (MySQL의 쿼리의 아니에요

관련 문제