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

时间:2017-07-01 13:01:00

标签: php mysql explode implode

我遇到麻烦,需要你的帮助。

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

我在mysql数据库中有以下值

表名:Item1

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

现在我想调用另一个表中的值,其中名称不等于上面的值。我用下面的查询。

$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

3 个答案:

答案 0 :(得分:0)

$mark变量不是数组。这就是为什么只有“Razil”在这个变量中分配的原因。

我认为你需要这样做:

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

答案 1 :(得分:0)

我会遵循不同的路径(使用数组来保存所有名称):

$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'];
}

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

答案 2 :(得分:0)

每次循环到表item1时,都会覆盖$ mark变量。我建议用group_concat编写第一个查询。

从item1

中选择group_concat(Mycol separator',')作为名称