gpt4 book ai didi

PHP/mysqli : Inserting IP address with mysqli_stmt_bind_param()

转载 作者:行者123 更新时间:2023-11-29 01:47:33 26 4
gpt4 key购买 nike

我有一个数据库表,其中包含一个无符号整数字段来存储访问者的 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() (在上面的示例中设置为字符串) 中的参数类型更改为整数,即 mysqli_bind_param(... 'si',...) - 但是没有用。

我还尝试使用以下代码代替 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 的参数应该是要插入的实际值,而不是任何函数。

关于PHP/mysqli : Inserting IP address with mysqli_stmt_bind_param(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2916962/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com