PHP MySQL: INET_ATON не сохраняет данные?

Я пытаюсь сохранить IP-адреса в своей базе данных, и я использую INET_ATON, как показано ниже,

$sql = "
INSERT INTO pin (
    page_id,
    user_id,
    pc_name,
    ip,
    geolocation,
    created_on
)VALUES(    
    ?,
    ?,
    ?,
    ?,
    ?,  
    NOW()
)";


$result = $this->connection->executeSQL($sql,array(
$this->page_id,
$this->user_id,
$this->getComputerName(),
'INET_ATON("123.136.106.104")',
$this->getGeoLocation()
));

Но я не могу преобразовать или сохранить его в поле ip в базе данных. Я получаю 0 вместо числа.

Что я должен делать? Что я сделал не так с SQL?


person laukok    schedule 30.09.2013    source источник
comment
Я подозреваю, что вы хотите вставить VALUES(?,?,?,?,INET_ATON(?),NOW()) и просто передать IP в качестве строкового параметра.   -  person Joachim Isaksson    schedule 30.09.2013
comment
Используйте ip2long() и long2ip(). Следуйте этому сообщению для справки [stackoverflow.com/questions/2754340/ [1]: stackoverflow.com/questions/2754340/   -  person user2830076    schedule 30.09.2013


Ответы (1)


Ваша проблема не в функции INET_ATON, а в том, как PDO (я предполагаю, что это PDO) интерпретирует связанный параметр. Вместо этого вы можете действовать так:

$sql = "
INSERT INTO pin (
    page_id,
    user_id,
    pc_name,
    ip,
    geolocation,
    created_on
)VALUES(    
    ?,
    ?,
    INET_ATON(?),
    ?,
    ?,  
    NOW()
)";

и передайте свой IP:

$result = $this->connection->executeSQL($sql,array(
$this->page_id,
$this->user_id,
$this->getComputerName(),
"123.136.106.104",
$this->getGeoLocation()
));
person Alma Do    schedule 30.09.2013