我想把一个数组中的值传递给一个变量
$coode = '111,222,333';
$rollnum = explode(",", $coode);
for($x = 0; $x < count($rollnum); $x++){
$products = $db->query("SELECT name FROM studentstb WHERE roll_no=".$rollnum[$x]."");
while($row = $products->fetch_assoc()){
$stdname =$row['name'];
}
}
echo($stdname);
我想把结果显示为tolu,tulu,talai,我想把这些值放到一个变量中,然后爆炸,检查数据库来检索它们的名字,然后显示它们。
我看到两个问题,第一个问题是 N + 1
查询,第二个是行 $stdname = $row['name'];
解决办法
$codes = '1,2,3';
$sql = "SELECT name FROM users WHERE id IN ({$codes})";
$result = $mysqli -> query($sql);
$namesArr = $result->fetch_all(MYSQLI_ASSOC);
$updatedNamesArr = array_map(function ($name){
return $name['name'];
}, $namesArr);
var_dump(implode(',', $updatedNamesArr));
产量
"Dmitry,Raf,Api"
该方法 fetch_assoc() 不应该为您的PDOStatement对象定义。$products 如果你正在使用PDO驱动,但它是为MySQLi定义的。
请检查 PDOStatement方法列表 此处 那些为MySQLi 这里。
另一方面,你的变量 $stdname 应该是一个数组,在这里你从查询中添加你的三个值.然后你应该调整你的while循环内容,像这样。
while($row = $products->fetch()){
//get the names in an array
$stdname[$x] = $row['name'];
}
最后,在你方便的时候做一个循环来显示这些名字。
现在工作了,我忽略了查询中的一个引号。
$rollnum = explode(',', $coode);
for($x = 0; $x < count($rollnum); $x++){
$products = $db->query("SELECT name FROM studentstb WHERE roll_no='".$rollnum[$x]."'");
while($row = $products->fetch_assoc()){
$stdname[$x] =$row['name'];
}
}
然后我用
foreach ($stdname as $a){
echo $a;