我有一个查询:
$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());
$startdate
的值是在$query设置时求值,还是在mysql_query()
调用时求值?
例如,说上面的查询返回0结果(mysql_num_rows($newbook)==0
)我可以改变$startdate
,然后再次调用$newbooks = mysql_query...
,或者我需要再次设置$query
首先?
变量在$query设置时求值。
就像这样做:
$query = "SELECT title FROM new_books ".
"WHERE timestamp >= '" . $startdate . "' ";
如果您希望使用不同的参数多次执行相同的查询,请使用准备好的语句:
$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
由于它被封装在双引号中,因此在设置$query时将对其求值。
当您设置这样的查询时,除了@arnaud576875提到的字符串连接之外,您什么也不做。如果您更改了$startdate变量,则需要重置查询。
在传递给mysql_query
之前,可以这样使用sprintf$query_format = "SELECT title FROM new_books WHERE timestamp >= '%s'";
$newbooks = mysql_query(sprintf($query_format, $startdate)) or die (mysql_error());
或者按照建议使用预处理语句