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
我有麻烦了,需要你的帮助。
数组转换为字符串只会添加内爆中的最后一行值,而不是全部。
我在 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