PHP 内爆不添加数据库的所有值

PHP implode not add all values of database

我有麻烦了,需要你的帮助。

数组转换为字符串只会添加内爆中的最后一行值,而不是全部。

我在 mysql 数据库中有以下值

Table 姓名:Item1

ID     Value
01     James,Jenny,Loreal
02     Sunny,John,Razil

现在我想调用另一个 table 的值,其中名称不等于上述值。我使用了以下查询。

$stmt= $db->prepare("Select * from Item1");
$stmt->execute();
while($row = $stmt->fetch(PDO::FETCH_BOTH))
{
   $mark=explode(',', $row['Value']);
}

 $string_version = "'" . implode("','", $mark) . "'";

//in $string_version it only ads the 2nd row values not all rows values i need to add the all values which is in Values colunm

$stmt = $db->prepare("Select * from item2 where names not in (".$string_version.") ");
$stmt->execute();
while($row = $stmt->fetch(PDO::FETCH_BOTH))
{
echo $row['name'];
}

结果:

James
Jenny
Loreal
Peter

预期结果:

Peter

$mark 变量不是数组。这就是为什么只有 "Razil" 在该变量中赋值。

我认为你需要这样做:

 while($row = $stmt->fetch(PDO::FETCH_BOTH))
{
   $mark[]=explode(',', $row['Value']);
}

我会走一条不同的路(使用一个数组来保存所有的名字):

$stmt= $db->prepare("Select * from Item1");
$stmt->execute();
$names = [];
while($row = $stmt->fetch(PDO::FETCH_BOTH))
{
   $mark=explode(',', $row['Value']);
   foreach ($mark as $name)
     $names[] = "'".$name."'";
}

$stmt = $db->prepare("Select * from item2 where names not in (".implode(', ', $names).") ");
$stmt->execute();
while($row = $stmt->fetch(PDO::FETCH_BOTH))
{
    echo $row['name'];
}

请注意,如果名称包含撇号字符 ('),此方法将无效。使用数据库层支持的转义。

每次循环到 table item1 时都会覆盖 $mark 变量。我建议用 group_concat.

编写第一个查询

select group_concat(Mycol separator ', ') as names from item1