1

db.table から 25 行のデータを html テーブルに表示しようとしています。php の while ループを使用して 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_fetch_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;
}
4

1 に答える 1

2

あなたdb_exec_prepared_stmtがどのように接続を準備しているかよくわかりません。しかしdb_exec_prepared_stmt、データベースにクエリを実行し、すべての結果に対して db_fetch_assoc を使用して結果の配列として返しているようです。私はvar_dump($result = db_exec_prepared_stmt($sql));あなたが何を得ているかを見たいと思います。1 次元配列を取得するdb_exec_prepared_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 オブジェクトを調べることもできます。

于 2013-03-27T19:03:53.953 に答える