PHP/mysqli:使用 mysqli_stmt_bind_param() 插入 IP 地址

2024-03-17

我有一个数据库表,其中包含一个无符号整数字段来存储访问者的 IP 地址:

`user_ip` INT(10) UNSIGNED DEFAULT NULL,

下面是尝试存储 IP 地址的 PHP 代码片段:

$ipaddr = $_SERVER['REMOTE_ADDR'];
if ($stmt = mysqli_prepare($dbconn, 'INSERT INTO visitors(user_email, user_ip) VALUES (?,?)'))
{
    $remote_ip = "INET_ATON('$ipaddr')";
    mysqli_stmt_bind_param($stmt, 'ss', $email, $remote_ip);
    if (mysqli_stmt_execute($stmt) === FALSE) return FALSE;
    $rows_affected = mysqli_stmt_affected_rows($stmt);
    mysqli_stmt_close($stmt);
}

INSERT 操作成功,但 user_ip 字段包含空值。 我还尝试更改 mysqli_stmt_bind_param() 中的参数类型(在上面的示例中设置为字符串)为整数,i.n. mysqli bind_param(... 'is',...) - 但无济于事。

我还尝试使用以下代码代替 mysql 的 INET_ATON() SQL 函数:

function IP_ATON($ipaddr)
{
    $trio = intval(substr($ipaddr,0,3));
    return ($trio>127) ? ((ip2long($ipaddr) & 0x7FFFFFFF) + 0x80000000) : ip2long($ipaddr);
}

它仍然不起作用 - “user_ip”字段仍然设置为空。我尝试在 mysqli_bind_param() 中将 $ip_addr 变量作为整数和字符串传递 - 无济于事。

看来问题出在参数化插入上。

下列 ”老式" 代码工作没有任何问题:

mysqli_query(..., "INSERT INTO visitors(user_email, user_ip) VALUES ('$email',INET_ATON('$ipaddr'))");

我在这里做错了什么?

提前致谢!


我认为它应该看起来像这样:

$ipaddr = $_SERVER['REMOTE_ADDR'];
if ($stmt = mysqli_prepare($dbconn, 'INSERT INTO visitors(user_email, user_ip) VALUES (?, INET_ATON(?))'))
{
    mysqli_stmt_bind_param($stmt, 'ss', $email, $ipaddr);
    if (mysqli_stmt_execute($stmt) === FALSE) return FALSE;
    $rows_affected = mysqli_stmt_affected_rows($stmt);
    mysqli_stmt_close($stmt);
}

注意第二秒的变化吗?以及哪些参数被发送到 mysqli_stmt_bind_param。

由于传递到 mysqli_stmt_bind_param 的参数应该是要插入的实际值,而不是任何函数。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PHP/mysqli:使用 mysqli_stmt_bind_param() 插入 IP 地址 的相关文章

随机推荐

  • 如何将附加(数据)文件与 Netbeans 模块捆绑在一起?

    我想将一些数据文件与我正在开发的 Netbeans 模块捆绑在一起 我知道我可以通过将资源添加到子文件夹中来捆绑资源 src所以它们会被包装在罐子里 但我不希望这些文件出现在存档中 这些文件应在 RCP 应用程序目录的子文件夹中显示为 松散
  • 如何执行SQL查询而不显示结果

    是否可以执行 SQL 查询而不显示结果 like Select from Table Name 运行此查询后 结果不应显示在 sql server 中 我很惊讶没有人想出答案 打开 执行后丢弃查询结果 选项 我很确定这就是面试官想要的 SE
  • 如何为专有语言构建 AST?

    我试图了解如何为专有语言构建 AST 我需要构建一个 AST 以便我可以输入我的规则和指南来检查源代码中可能存在的错误 如何构建 AST 有没有任何书籍 文章可以帮助我入门 龙的编译器书有帮助吗 请注意 我没有 CS 背景 Thanks 这
  • C 中的作用域可以用括号括起来并返回一个值吗? [复制]

    这个问题在这里已经有答案了 我查了定义MIN在 Mac OS X 上 发现了这个 define MIN A B typeof A a A typeof B b B a lt b a b 一开始并不那么明显 但是当它扩展时 它就变成了对我来说
  • RestEasy:找不到类型为 java.util.ArrayList 媒体类型为 application/json 的响应对象的 MessageBodyWriter

    消息 无法找到类型为响应对象的 MessageBodyWriter 媒体类型的 java util ArrayList application json 描述 服务器遇到内部错误 找不到 MessageBodyWriter 用于类型为 ja
  • 阻止浏览器加载我的网页的未更新的缓存版本。

    Problem 我的主页上有 8 张图片 可以通过上传页面进行更改 更改 8 个图像后 用户导航回主页以查看新图像 但是 不会显示新图像 旧图像仍然存在 直到刷新浏览器 我猜测这是因为浏览器正在缓存页面然后重新加载缓存的页面 到目前为止我已
  • backbone.js 中的绑定和 _.bindAll

    我对绑定及其目的感到困惑 bind All在backbone js中 下面是创建模态视图的工作代码 modal并渲染从后端获取的评论 首先 在下面的代码中 我在initialize功能 bindAll this render renderC
  • `parse_rackup_file':rackup 文件 (config.ru) 不可读 (ArgumentError)

    我的 procfile 中有这个 web bundle exec unicorn p PORT c config unicorn rb 启动服务器后 我收到以下错误消息 foreman start 12 29 20 web 1 starte
  • 原始值的映射替代方案

    我对我的应用程序进行了一些分析 结果之一表明堆上大约 18 的内存被 类型的对象使用Double 事实证明这些对象是中的值Maps 我不能使用原始类型 我的推理是原始类型double比它的对象消耗更少的内存Double 有没有一种方法可以拥
  • 垃圾收集器是否跟踪所有 Python 对象?

    我正在尝试调试内存泄漏 请参阅问题Python Twisted 中的内存泄漏 它在哪里 https stackoverflow com questions 4078084 memory leak in python twisted wher
  • 处于咕噜模式的猪

    我在windows中安装了cygwin hadoop和pig 配置看起来不错 因为我可以在批处理和嵌入模式下运行 Pig 脚本 当我尝试以 grunt 模式运行 pig 时 发生了一些奇怪的事情 让我解释 我尝试运行一个简单的命令 例如 g
  • 如何使用 Microsoft Graph 或 Office 365 REST API 从 Outlook 获取所有任务?

    我正在构建一个 Web 应用程序 需要从使用 Outlook 任务的组织中获取所有任务 可以使用 Microsoft Graph 或 Office 365 REST API 来完成此操作吗 我在这两个服务的文档中都没有发现任何可以执行类似操
  • Google 文档查看器返回 204 响应,不再工作,有替代方案吗?

    更新时间 2016 年 11 月 16 日上午 9 53 美国东部时间 尽管 Google 声称已经 修复 了该问题 但许多人仍然看到 204 回复 当我自己测试文档加载 50 次时 其中 3 次 Google 返回了 204 响应 请访问
  • 重写使用 from...import 的模块方法

    我在重写方法时遇到问题from import语句被使用 一些例子来说明问题 a py module def print message msg print msg b py module from a import print messag
  • Stackoverflow 和函数指针

    我对此很迷茫 希望这里有人能提供帮助 我的应用程序由数百个评估数字代码的函数组成 每个函数的源代码在 5MB 范围内 并且我使用std map到函数指针 显然发生的情况是 当我尝试将参数传递给其中一个函数 通过指向它的指针访问 时 出现堆栈
  • Unity3d 5 WavePro 动态网格碰撞器

    我使用 Water4Advance 在 Unity3d 5 0 中模拟海浪 我在运行时使用 Gerstner Displace 使我的飞机发生位移 我看到网格如何变形 并向其中添加一个 MeshCollider 并且我喜欢在运行时刷新此对撞
  • 如何引用 DNX Core 5.0 (ASP.NET 5) 中的执行程序集?

    我正在从 NET 3 5 4 5 移植一些代码 在我的程序集中 我有一些从当前正在执行的程序集中读取资源的代码 然而 GetExecutingAssembly 不是一个方法Assembly输入 DNX core 5 0 var xsdStr
  • 最长的字母子串 - 从哪里开始

    我正在研究流行的麻省理工学院课程中的 最长字母子串 问题 我已经阅读了很多关于如何编码的信息 但我真的很难在概念上实现飞跃 前面的手指练习并不太难 我想知道是否有人知道任何材料可以真正打破这个问题中所采用的问题解决方法 我试着拿出笔和纸 但
  • 在 Eclipse 中粘贴多行 Java 字符串 [重复]

    这个问题在这里已经有答案了 不幸的是 Java 没有多行字符串文字的语法 如果 IDE 可以轻松使用类似的结构 那就没问题了 String x CREATE TABLE TEST n A INTEGER NOT NULL PRIMARY K
  • PHP/mysqli:使用 mysqli_stmt_bind_param() 插入 IP 地址

    我有一个数据库表 其中包含一个无符号整数字段来存储访问者的 IP 地址 user ip INT 10 UNSIGNED DEFAULT NULL 下面是尝试存储 IP 地址的 PHP 代码片段 ipaddr SERVER REMOTE AD