Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 插入多个IP地址';输入数据库_Php_Mysql_Arrays_Curl - Fatal编程技术网

Php 插入多个IP地址';输入数据库

Php 插入多个IP地址';输入数据库,php,mysql,arrays,curl,Php,Mysql,Arrays,Curl,使用cURL以127.0.0.1:8080格式将多个IP地址(代理)插入数据库时遇到问题 我可以使用print_r($proxies)在PHP中显示数据,但在保存到数据库时,我只能保存IP地址的前3个值,其他什么都不能保存 我只想在数据库中以127.0.0.1:8080等格式保存代理,但我只得到插入的IP地址的第一个值,(1,12,127)等,而不是(127.0.0.1:8080) 在我使用的数据库中创建表/列时 表名:socks5 列名:代理 类型:int(20) 属性:无符号 这是我的密

使用cURL以127.0.0.1:8080格式将多个IP地址(代理)插入数据库时遇到问题

我可以使用print_r($proxies)在PHP中显示数据,但在保存到数据库时,我只能保存IP地址的前3个值,其他什么都不能保存

我只想在数据库中以127.0.0.1:8080等格式保存代理,但我只得到插入的IP地址的第一个值,(1,12,127)等,而不是(127.0.0.1:8080)

在我使用的数据库中创建表/列时

  • 表名:socks5
  • 列名:代理
  • 类型:int(20)
  • 属性:无符号
这是我的密码

scraper.php

<?php
require_once __DIR__ . '/lib/dblibary.class.php';
$app = new DBLib;


$curl = curl_init();

curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_USERAGENT, 'Mozillia/5.0');

$proxies = array();

$start_count = 1;
$end_count = 10;

for($i = $start_count; $i <= $end_count; $i++) {

    curl_setopt($curl, CURLOPT_URL, "https://www.my-proxy.com/free-proxy-list-$i.html");

    $result = curl_exec($curl);
    
    preg_match_all("!\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}:\d{2,4}!",$result,$matches);

        foreach($matches[0] as $match) { 
        
        $proxies = $app->GrabProxy($match);
    }
    
}

curl_close($curl);  
//Display the proxies within HTML(This works and displays IP & Port)
//echo '<pre>'; print_r($proxies); echo '</pre>';
我真的非常感谢你在这方面的帮助。
谢谢。

您是否尝试将列类型改为varchar(200)而不是int

在绑定中,您使用的是
PDO::PARAM_INT
——因为这只适用于整数,所以它只接受第一组数字。应该是
PDO::PARAM_STR
(也假设列定义为字符字段)。非常感谢!,我不知道我脑子里在想什么。这是一个简单的解决方法!!。我照你说的做了,再次使用VARCHAR(255)创建了表/列,并将bind更改为PDO::PARAM_STRdon。我不会将字符串存储为整数,而是将字符串存储为字符串(mysql有几种字符串类型,如MEDIUMTEXT、check),还读取-整数是数字,而不是字符串首先-错误给了你mysql什么?为什么不能添加更多-如果出现错误,请第二次显示-不要在循环中运行add,将所有IP放入一个数组,使此数组唯一且通用-int表示只存储数字,但是IP地址是一个字符串,如果你想把它存储为数字,那么你必须把它分成4组数字和分号,就像portI之前做的那样,而且它是有效的。我还将dblibary.class.php文件中的绑定从
PDO::PARAM_INT
更改为
PDO::PARAM_STR
 public function GrabProxy($match) {

    try {
        $db = DB();
        $query = $db->prepare("INSERT INTO socks5 (proxies) VALUES (:proxies)");
        $query->bindParam("proxies", $match, PDO::PARAM_INT);
        $query->execute();
        if ($query->rowCount() > 0) {
            return true;
        }
        
    }
    catch(PDOException $e) {
        exit($e->getMessage());
    }
}