包含IP地址的SQL查询作为正常查询工作,但不作为准备的语句



请参阅底部的代码

我有一个页面,可以检查用户上一次从用户当前IP地址按下按钮的页面。代码看起来像这样:

$lastPressQuery = "SELECT MAX(tstamp) AS 'last_press' FROM presses WHERE ip = $ipNum";
$lastPressResult = mysqli_query($conn, $lastPressQuery);
$lastPressRow = mysqli_fetch_assoc($lastPressResult);

(使用IP2LONG转换$ipNum(

此代码按预期工作。但是,根据最佳实践,我想将其更改为准备好的声明。这是我为准备好的语句编写的代码:

$lastPressQuery = $conn -> prepare("SELECT MAX(tstamp) AS 'last_press' FROM presses WHERE ip = ?");
$lastPressQuery -> bind_param("i", $ipNum);
$lastPressResult = $lastPressQuery -> execute();
$lastPressRow = mysqli_fetch_assoc($lastPressResult);

这不起作用。 execute()返回false。

我尝试将IP地址作为字符串留下,将$ip作为字符串或围绕它的撇号放置或问号,检查ipNum是否有错误,然后输入该查询,它应该直接创建到SQL中(可行(。后来准备的INSERT数据的语句效果很好。是什么导致该准备好的陈述失败?

编辑:我终于可以工作了。成功的代码是:

$lastPressQuery = $conn -> prepare("SELECT MAX(tstamp) AS 'last_press' FROM presses WHERE ip = ?");
$lastPressQuery -> bind_param("i", $ipNum);
$lastPressQuery -> execute();
$lastPressResult = $lastPressQuery -> get_result();

您正在传递准备好的语句对象,而不是结果,请尝试

$lastPressResult = $lastPressResult -> execute();
$lastPressRow = mysqli_fetch_assoc($lastPressResult);

成功的代码是:

$lastPressQuery = $conn -> prepare("SELECT MAX(tstamp) AS 'last_press' FROM presses WHERE ip = ?");
$lastPressQuery -> bind_param("i", $ipNum);
$lastPressQuery -> execute();
$lastPressResult = $lastPressQuery -> get_result();

最新更新