【发布时间】:2017-05-26 18:47:33
【问题描述】:
我正在尝试将远程用户 IP 保存在数据库中。为此,我将列创建为int(10) UNSIGNED。
当我这样尝试时,一切正常,但 IP 保存为 127.0.0.1
$ipaddr = $_SERVER['REMOTE_ADDR'];
$stmt = $pdo->prepare('INSERT INTO comment (body, author, email, date, url, ip) VALUES (:body, :author, :email, NOW(), :url, :ipaddr)');
$stmt->execute(array(
':body' => $_POST['k3jZGEeX1k1oo'],
':author' => $_POST['k3k0xKicU0eHQ'],
':email' => $email,
'url' => $url,
'ip' => $ipaddr
));
当我尝试使用 INET_ATON 时,数据库中没有任何内容。
$ipaddr = $_SERVER['REMOTE_ADDR'];
$stmt = $pdo->prepare('INSERT INTO comment (body, author, email, date, url, ip) VALUES (:body, :author, :email, NOW(), :url, :INET_ATON(ipaddr))');
$stmt->execute(array(
':body' => $_POST['k3jZGEeX1k1oo'],
':author' => $_POST['k3k0xKicU0eHQ'],
':email' => $email,
'url' => $url,
'ip' => $ipaddr
));
注意:INET_ATON(ipaddr)。如何使用准备好的语句做到这一点?
【问题讨论】:
-
:INET_ATON?那是一个内置函数dev.mysql.com/doc/refman/5.7/en/… 为什么是冒号?你想要的是INET_ATON(:ip) -
你不应该使用
int(10) UNSIGNED。这是一个“奇怪”的数字……你有 3 个点(.)。所以改成varchar(12)->XXX.YYY.ZZZ.WWW-> 12 -
@Fred-ii- 我也试过这样,但后来我得到了
error 500 -
然后检查您的日志;失败并使用 pdo 的错误检查
-
再次;您不应该为该内置函数使用冒号。如果它不在 db 中,请使用 pdo 的错误处理 php.net/manual/en/pdo.error-handling.php 和 php 的错误报告 php.net/manual/en/function.error-reporting.php 来查看是否有任何结果。 var_dump 一切以查看是否通过并检查您的数据库的列类型。