我有一个问题:
$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());
设置$ query或$startdate
调用时,是否评估mysql_query()
的值?
例如说上面的查询返回0结果(mysql_num_rows($newbook)==0
)我可以更改$startdate
然后再次调用$newbooks = mysql_query...
,还是需要先重新设置$query
?
答案 0 :(得分:3)
在设置$ query时评估变量。
这就像这样:
$query = "SELECT title FROM new_books ".
"WHERE timestamp >= '" . $startdate . "' ";
如果您想使用不同的参数多次执行相同的查询,请使用 prepared statements :
$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();
...
上的示例
答案 1 :(得分:1)
因为它用双引号封装,所以在设置$ query时会对它进行评估。
答案 2 :(得分:0)
当您设置这样的查询时,除了提到的@ arnaud576875之外,您什么都不做,只能进行字符串连接。如果更改$ startdate变量,则需要重置查询。
在将sprintf传递给mysql_query
之前,你可能会使用这样的sprintf$query_format = "SELECT title FROM new_books WHERE timestamp >= '%s'";
$newbooks = mysql_query(sprintf($query_format, $startdate)) or die (mysql_error());
或者只是按建议使用预备陈述