Php 选择一个表并使用while循环在表中显示其数据

Php 选择一个表并使用while循环在表中显示其数据,php,mysql,while-loop,html-table,Php,Mysql,While Loop,Html Table,我试图使用php while循环25行,在html表中显示来自db.table的25行数据。目前,我没有25行限制器,只是想在此时显示数据。这是我的 <table> <td><strong>User Name</strong></td> <td><strong>User Email</strong></td>

我试图使用php while循环25行,在html表中显示来自db.table的25行数据。目前,我没有25行限制器,只是想在此时显示数据。这是我的

<table>
    <td><strong>User Name</strong></td>                 
    <td><strong>User Email</strong></td>                        
    <td><strong>Is User an Admin</strong></td>
    <td><strong>Is User Active</strong></td>
<?php
$sql = 'SELECT name, login, is_admin, active
        FROM db.users';
$result = db_exec_prepared_stmt($sql);
while($rows = mysql_fetch_assoc($result)) {
    $user_name = $rows['name'];
    $user_email = $rows['login'];
    $user_admin = $rows['is_admin'];
    $user_active = $rows['active'];

    echo '<tr>
             <td>' . $user_name . '</td>
             <td>' . $user_email . '</td>
             <td>' . $user_admin . '</td>
             <td>' . $user_active . '</td>
         </tr>';
}
?>
</table>

用户名
用户电子邮件
用户是管理员吗
用户处于活动状态
我知道mysql\u fetch\u assoc()在这里不起作用,但我需要帮助才能获得有效的代码。

下面是db_exec_prepared_stmt()函数

function db_exec_prepared_stmt($sql, $params=array(), $query_type='select') {
$types = '';
foreach($params as $p)  {
    if( is_numeric($p)
        && ($p <= 2147483647) 
        && (numberOfDecimals($p) === 0)
    ) $types .= 'i';
    else $types .= 's';
}
$db = db_open_connection();

if($stmt = $db->prepare($sql))  { 
    if($types != '')    {
        $binds = array_merge( array($types), $params );


        call_user_func_array( array($stmt, 'bind_param'), makeValuesReferenced($binds) );
    }

    switch($query_type) {
        case 'select':
            $results = db_fetch_assoc($stmt);
            break;

        case 'insert':
            $stmt->execute();
            $results = $db->insert_id;
            break;

        default:
            $stmt->execute();
            $results = null;
            break;
    }

    if('' != $stmt->error) printf("Error %s: %s.\n", $stmt->errno, $stmt->error);
}
else    {
    printf("Error %s: %s.\n", $db->errno, $db->error);
    $results = null;
}

db_close_connection($db);

return $results;
}
函数db\u exec\u prepared\u stmt($sql,$params=array(),$query\u type='select')){
$types='';
foreach($p参数){
如果(是数字($p)
&&($p准备($sql)){
如果($types!=''){
$binds=array\u merge(数组($types),$params);
调用_user_func_数组(数组($stmt,'bind_param'),使值引用($binds));
}
开关($query\u类型){
案例“选择”:
$results=db\u fetch\u assoc($stmt);
打破
案例“插入”:
$stmt->execute();
$results=$db->insert_id;
打破
违约:
$stmt->execute();
$results=null;
打破
}
如果(“”!=$stmt->error)printf(“错误%s:%s.\n”,$stmt->errno,$stmt->error);
}
否则{
printf(“错误%s:%s.\n”,$db->errno,$db->Error);
$results=null;
}
db_关闭连接($db);
返回$results;
}

我不熟悉您的
db\u exec\u prepared\u stmt
是如何准备连接的。但看起来
db\u exec\u prepared\u stmt
正在查询数据库,并使用db\u fetch\u assoc对所有结果进行检索,并将其作为结果数组返回。我将
var\u dump($result=db\u exec\u prepared\u stmt($sql))
并查看得到的结果。如果得到的是一维数组,则需要修改
db\u exec\u prepared\u stmt
,以便在选择查询类型时

case 'select':
    while($row=db_fetch_assoc($stmt)){
      $results[]=$row;
    }
    break;
如果您得到一个包含行数组的数组,那么我将切换到
foreach

foreach(db_exec_prepared_stmt($sql) as $row){
  //WORK
}
或者如果必须使用while循环

while(next($results)){
  //WORK
}

老实说,我不会使用
db_exec_prepared_stmt
,因为它试图为每个人提供一切,而且做得不是很好。此外,您可能还想查看PDO对象。

这看起来像是一个家庭作业式的问题。您使用什么连接到您的db?mysql\u connect_db?新的MySQLi();下面的答案帮助我找到了答案。连接和函数db_exec_prepared_stmt()都是可以正常工作的遗留代码。这是我的工作。Dev in training.keen,记住
echo”“;var_dump($i);
是你的朋友,特别是当你从选择的查询中得到意外结果时。非常感谢!!我使用了foreach,它工作得很好!!上传投票(只要我能上传lol)并接受答案。再次感谢。