我有一个数据库表,其中包含一个无符号整数字段来存储访问者的 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'))");
我在这里做错了什么?
提前致谢!