Как вызвать все данные с MySQL из массива, который был взорван - PullRequest
0 голосов
/ 01 ноября 2019

Мои значения перед разнесением 90PAS010,80PAS010

Затем я разделяю их, используя функцию разнесения

$site = $row["site"];
$exploded_site = explode(',', $site);

Я хочу напечатать таблицу, используя fpdf, используя все полученные данные. Это мои коды:

$sql = mysqli_query($connect, "select * from site WHERE siteid='$exploded_site[0]'");
    while($row=mysqli_fetch_array($sql)){
       //do print table
    }

Проблема в том, что он показывает только 1 данные только потому, что $ exploded_site [0] . Как автоматически изменить [0] , когда массив имеет более одного значения ??

Спасибо, прежде чем

Ответы [ 3 ]

2 голосов
/ 01 ноября 2019

Одним из решений было бы выполнение запроса SQL, который извлекает все идентификаторы сайта одновременно, и одним из многих способов сделать это было бы использование условия IN.

$site = $row["site"];


/**
 * Function sanitizes and quotes each site id and returns a string to be used in the SQL IN operator.
 *
 *
 * @param string $site
 * @param mysql string
 * @return string
 */
function sanitizeSiteIds($site, mysqli $connect) {
    // split each site ids into arrays.
    $exploded_site = explode(',', $site);

    // escape all the site ids.
    $sanitizedSites = array_map(function($site) use($connect) {
        return mysqli_real_escape_string($connect, trim($site));
    }, $exploded_site);

    // join all the site ids to something like:
    $sitesInStr = implode(',', $sanitizedSites);

    return $sitesInStr;
}


$site = sanitizeSiteIds($site, $connect);


// query will fetch all site Ids
$sql = mysqli_query($connect, "select * from site WHERE siteid IN ($site)");
while($row=mysqli_fetch_array($sql)){
    //do print table
}
0 голосов
/ 01 ноября 2019

Вы можете использовать FIND_IN_SET в MySQL.

У вас уже есть строка, разделенная запятыми, просто измените запрос следующим образом:

$ sql = mysqli_query ($ connect, "select *с сайта WHERE FIND_IN_SET (siteid, '$ exploded_site') ");

Вы можете получить ссылку здесь:

https://arjunphp.com/mysql-clause-comma-separated-valuesstring/

0 голосов
/ 01 ноября 2019

У вас уже есть строка 90PAS010,80PAS010.

Не разделяйте и не используйте ее напрямую с оператором MySQL in().

Используйте следующий код:

...

$sql = mysqli_query($connect, "select * from site WHERE siteid in($sites)");

...

ОБНОВЛЕНИЕ 1: кажется, что siteid является строковым столбцом. Поэтому вам может понадобиться разобрать строку, но на самом деле по другой причине.

Перед использованием переменной $ sites, указанной выше, выполните следующее:

$sites = array_map(function($v){
   return "'$v'";

}, explode(',', $sites));

$sites = implode(',',$sites)


ОБНОВЛЕНИЕ 2: Я использовал переменную $sites. Вы можете изменить его, если он не соответствует вашему контексту.

...