Я пытаюсь создать массив http_build_query, но он вставляет несколько разных символов, это мой код:

function Conectar(){
    try{
        $opcoes = array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES UTF8');
        $con = new PDO("mysql:host=localhost; dbname=*****;", "*****", "*****", $opcoes);
        $con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

        return $con;
    } catch (Exception $e){
        echo 'Erro: '.$e->getMessage();
        return null;
    }
}

$pdo = Conectar();

    $sql = "
    SELECT dominio 
    FROM dominios_extraidos 
    WHERE verificado='0' LIMIT 3
    ";

    $stm = $pdo->prepare($sql);
    $stm->execute();

while ($rows = $stm->fetch()) {
    $query = http_build_query(array(
        'domains' => array(
            ''.$rows['dominio'].'',
        )
    ));
    
    
    print_r($query);
    }

Создание этого вывода:

domains%5B0%5D=0002021web.com.br%0Adomains%5B0%5D=007import.com.br%0Adomains%5B0%5D=00pet.com.br%0A

Но это мое желание:

domains%5B0%5D=0002021web.com.br&domains%5B1%5D=007import.com.br&domains%5B2%5D=00pet.com.br

Вывод моего желания может быть сгенерирован вручную с помощью этого кода:

$query = http_build_query(array(
        'domains' => array(
            '0002021web.com.br',
            '007import.com.br',
            '00pet.com.br',
        )
    ));
    
    
    print_r($query);

Спасибо за ваше время :)

1
Sophie 17 Янв 2022 в 16:52
Вы каждый раз перезаписываете запрос. Сначала создайте свой массив, затем используйте http_build_query
 – 
aynber
17 Янв 2022 в 16:55
Зачем тебе ''.? %0A — это новая строка в кодировке URL, которая, вероятно, исходит из добавленного ничего.
 – 
user3783243
17 Янв 2022 в 16:57
Привет, @user3783243, спасибо за уделенное время, ты имеешь в виду эту часть: ''.$rows['dominio'].''?
 – 
Sophie
17 Янв 2022 в 17:01
Здравствуйте @aynber, спасибо за ваше время, верно, и я должен продолжать печатать http_build_query внутри foreach?
 – 
Sophie
17 Янв 2022 в 17:03
2
Нет, не печатайте http_build_query внутри файла foreach. Создайте весь свой массив, прежде чем пытаться построить запрос
 – 
aynber
17 Янв 2022 в 17:05

3 ответа

Лучший ответ

Сначала вы хотите правильно построить свой массив, чтобы он выглядел как ваш ручной массив, а затем используйте http_build_query:

$domains = ['domains' => []];
while ($rows = $stm->fetch()) {
    $domains['domains'][] = trim($rows['dominio']);
}

$query = http_build_query($domains);
print_r($query);
1
aynber 17 Янв 2022 в 17:24
Эй, спасибо за ваш ответ, но вывод отличается от моего желаемого вывода, это вывод, который я получаю из вашего кода: domains%5B0%5D=0002021web.com.br%0A&domains%5B1%5D=007import.com.br %0A&домены%5B2%5D=00pet.com.br%0A
 – 
Sophie
17 Янв 2022 в 17:11
Я обновил его, чтобы обрезать результаты базы данных, что должно удалить переводы строки.
 – 
aynber
17 Янв 2022 в 17:25
Черт... большое спасибо за ваше время!, это работает отлично :o
 – 
Sophie
17 Янв 2022 в 17:27

Создайте массив доменов в цикле, а затем, после завершения цикла, передайте его в качестве параметра в http_build_query().

while ($rows = $stm->fetch()) {
    $doms[] = trim($rows['dominio']);
}

$query = http_build_query( ['domains' => $doms] );
    
print_r($query);

Это будет производить

domains%5B0%5D=0002021web.com.br%0A&domains%5B1%5D=007import.com.br%0A&domains%5B2%5D=00pet.com.br%0A

Что приравнивается к

domains[0]=0002021web.com.br
&domains[1]=007import.com.br
&domains[2]=00pet.com.br
1
RiggsFolly 17 Янв 2022 в 17:22
Эй, RiggsFolly, спасибо за ваш ответ, но вывод отличается от моего желаемого вывода, это вывод, который я получаю из вашего кода: domains%5B0%5D=0002021web.com.br%0A&domains%5B1%5D=007import.com. br%0A&domains%5B2%5D=00pet.com.br%0A
 – 
Sophie
17 Янв 2022 в 17:12
Хм, я должен создать такой же вывод, как этот: domains%5B0%5D=0002021web.com.br&domains%5B1%5D=007import.com.br&domains%5B2%5D=00pet.com.br, чтобы иметь возможность использовать API, и у каждого звонка будет 1000 доменов... Не могли бы вы мне что-нибудь предложить?
 – 
Sophie
17 Янв 2022 в 17:22
Я думаю, у вас должен быть перевод строки в столбце базы данных ?? trim() должен удалить этот [GIGO] :)
 – 
RiggsFolly
17 Янв 2022 в 17:26
О, хороший момент, проверю это, большое спасибо, RiggsFolly !!! :)
 – 
Sophie
17 Янв 2022 в 17:28

0A расшифровано как \n или Line Feed, возможно, попробуйте сначала очистить его с помощью

$query= trim($query, "\x00..\x20\x7F");

Этот код удаляет символ ASCII от 00 до 20 шестнадцатеричных и 7f шестнадцатеричных

0
Presner Pontillas 17 Янв 2022 в 17:04
1
OP должен действительно определить, откуда берется новая строка, а не добавлять к ней пластырь.
 – 
user3783243
17 Янв 2022 в 17:05