如何从已展开的数组中调用带有 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
}
爆炸前我的数值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
}