何时在mysql查询中评估变量?

时间:2011-09-14 18:47:48

标签: php 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());

设置$ query或$startdate调用时,是否评估mysql_query()的值?

例如说上面的查询返回0结果(mysql_num_rows($newbook)==0)我可以更改$startdate然后再次调用$newbooks = mysql_query...,还是需要先重新设置$query

3 个答案:

答案 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();
...

请参阅http://docs.php.net/manual/en/mysqli.prepare.php

上的示例

答案 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());

或者只是按建议使用预备陈述