如何从已展开的数组中调用带有 mysql 的所有数据

How to call all data with mysql from array that has been exploded

爆炸前我的数值90PAS010,80PAS010

然后我用explode函数拆分它们

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

我想使用获得的每个数据使用 fpdf 打印 table。这是我的代码:

$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]

先致谢

您已经有一个字符串 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。如果它不适合您的上下文,您可以更改它。

您可以在 MySQL 中使用 FIND_IN_SET。

您已经有了逗号分隔的字符串,只需像这样在查询中进行更改:

$sql = mysqli_query($connect, "select * from site WHERE FIND_IN_SET(siteid,'$exploded_site')");

您可以从这里获得参考:

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

解决方案之一是执行 SQL 查询,一次获取所有站点 ID,其中一种方法是使用 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
}