为了账号安全,请及时绑定邮箱和手机立即绑定

包含 IP 地址的 SQL 查询作为普通查询工作,但不像准备好的语句那样工作

包含 IP 地址的 SQL 查询作为普通查询工作,但不像准备好的语句那样工作

PHP
跃然一笑 2021-11-13 16:29:56
请参阅底部以了解有效的代码我有一个页面,用于检查用户上次按下用户当前 IP 地址中的按钮的时间。代码如下所示:$lastPressQuery = "SELECT MAX(tstamp) AS 'last_press' FROM presses WHERE ip = $ipNum";$lastPressResult = mysqli_query($conn, $lastPressQuery);$lastPressRow = mysqli_fetch_assoc($lastPressResult);($ipNum使用 ip2long 转换)此代码按预期工作。但是,根据最佳实践,我想将其更改为准备好的声明。这是我为准备好的语句编写的代码:$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()返回假。我曾尝试将 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();
查看完整描述

2 回答

?
绝地无双

TA贡献1946条经验 获得超4个赞

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


$lastPressResult = $lastPressResult -> execute();

$lastPressRow = mysqli_fetch_assoc($lastPressResult);


查看完整回答
反对 回复 2021-11-13
?
30秒到达战场

TA贡献1828条经验 获得超6个赞

成功的代码是:


$lastPressQuery = $conn -> prepare("SELECT MAX(tstamp) AS 'last_press' FROM presses WHERE ip = ?");

$lastPressQuery -> bind_param("i", $ipNum);

$lastPressQuery -> execute();

$lastPressResult = $lastPressQuery -> get_result();


查看完整回答
反对 回复 2021-11-13
  • 2 回答
  • 0 关注
  • 144 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信