2016-08-15 58 views
0

我想做一个while循环,它从Mysql数据库中检索所有相关数据,但它不适用于多个变量,我认为这个问题与while循环有关,因为我回显了sql语句,该变量的值正确,代码:while循环不能用于多个变量php?

$wherein = implode(',', $_SESSION['cart']); 
$sql = "select ID, Name, Price from lamps WHERE ID = '$wherein'"; 
$result = mysqli_query($conn, $sql); 

echo "<table style='width:100%' border='1' >"; 
echo "<tr>"; 
echo "<th> Product Name</th>"; 
echo "<th>Product Price </th>" ; 
echo "<th>Quantity </th>" ; 
echo "</tr>"; 

while ($row = mysqli_fetch_array($result, MYSQLI_ASSOC)) { 
    echo "<tr>"; 
    echo "<td>" . $row['Name'] . "</td>"; 
    echo "<td> $". $row['Price'] . "</td>" ; 
    echo "<td> <select> 
     <option value= '1'>1</option> 
     <option value= '2'>2</option> 
     <option value= '3'>3</option> 
    </select> 
    </td>"; 

    echo "</tr>"; 
} 

echo "</table>"; 

我已经尝试了许多事情的代码,但问题依然存在,我将非常感谢您的帮助,谢谢。

+0

你是什么意思说_it适用于一个变量_?顺便说一句,有一个** $ **之前_ $行['价格'] _ –

+0

好吧,它唯一的工作1次,因为你的查询只获得1行,我们假设数据库有单身份证的人不重复,如果你的查询是:给我一些字段id = single_id,那么结果将是1行,如果它存在... –

+0

@PavulZavala我回应了查询,它有多个变量 – hossam

回答

1

</table>语句位于while循环中。因此,一旦表格在第一次循环后关闭,其余的数据可能不会显示在浏览器上(它仍然会在您的html源代码中)。尝试将</table>语句移动到最后一行。

+0

我刚试过但仍然不幸没有工作 – hossam

1

假设通过imploding变量你将有多个ID,那么你应该在SQL中使用IN语句。

$wherein = implode("','", $_SESSION['cart']); 
$sql = "select ID, Name, Price from lamps WHERE ID IN ('$wherein')"; 

呈现的输出可以稍微简化,表格应该在循环后关闭!不知道的内容$wherein使得它棘手的回答,但我会认为IN说法似乎符合一个逗号分隔值的性质在查询中使用比直接等号=

$wherein = implode("','", $_SESSION['cart']); 
$sql = "select ID, Name, Price from lamps WHERE ID IN ('$wherein')"; 
$result= mysqli_query($conn, $sql); 

echo " 
    <table style='width:100%' border='1' > 
     <tr> 
      <th> Product Name</th> 
      <th>Product Price </th> 
      <th>Quantity </th> 
     </tr>"; 

while ($row = mysqli_fetch_object($result)){ 
    echo " 
     <tr> 
      <td>{$row->Name}</td> 
      <td>${$row->Price}</td> 
      <td> 
       <select> 
        <option value= '1'>1 
        <option value= '2'>2 
        <option value= '3'>3 
       </select>   
      </td> 
     </tr>"; 
} 
echo " 
    </table>"; 


/* Example of using an array of IDs and imploding to generate where conditions for IN clause */ 

$cart=array('BGL1','BJL'); 
/* session - cart */ 

$wherein=implode("','", $cart); 
/* correctly add quotes around each string */ 

$sql="select ID, Name, Price from lamps WHERE ID IN ('$wherein');"; 
/* use the new $wherein string within quotes */ 
echo $sql; 

>> select ID, Name, Price from lamps WHERE ID IN ('BGL1','BJL'); 
+0

我试过的第一件事查询是这个确切的语句,但仍然存在这个问题 – hossam

+0

当变量已设置时,最终的SQL看起来像什么?即:你是否可以在执行时显示sql – RamRaider

+0

对多个变量执行时,它只显示列头,但只有一个变量时显示该变量的所有信息;产品名称和价格 – hossam