gpt4 book ai didi

php - 使用 PDO 从 MySQL 表中每页选择并显示 N=50 条记录

转载 作者:行者123 更新时间:2023-11-29 23:27:50 25 4
gpt4 key购买 nike

我正在编写一个脚本,该脚本查询 MySQL 数据库以显示表中的所有记录。过去我有一个带有过程代码的工作解决方案,但现在我想使用 PDO 和一个类(我定义的一种 PDO 包装器)。由于某种原因,我没有看到任何内容,页面已成功加载,但没有显示表格,也没有显示数据......不过,我也没有收到任何错误消息。任何调试以下代码的帮助将不胜感激。我特别想知道在这种情况下如何调试PDO。这是 list_患者脚本:

<?php

// Ok. Let's define the page title, dynamically: see config.inc.php for details
$page_title = 'Kardia: Patients List';

// First --> Let us then include info regarding the connection to the database, PHP functions, and header section and page title

require('../../includes/config.inc.php');
require('../../includes/class.dataBase.php');
require('../../includes/functions.php');
require('../elements/layouts/header.php');

// Second --> Let's 'Check whether user has the rights to see current page or not

if(!isLoggedIn()) //"isLoggedIn" is a pre-specified function in functions.php file
{
header('Location: ../index.php');
die();
}

// Number of records to show per page:

$display = 50;

try {

// Determine how many pages there are...
if (isset($_GET['p']) && is_numeric($_GET['p'])) { // Already been determined. p = pages

$pages = $_GET['p'];

} else { // Need to determine.

// Count the number of records:

$db = new dataBase(); // istantiate a new object (db) from the class Database
// Run the query to count number of records in the demographics table


$stmt = $db -> execute('SELECT COUNT(PID) FROM `demographics`;');



// setting the fetch mode


$row = $stmt-> single(PDO::FETCH_NUM);



$records = $row[0];



// Calculate the number of pages...
if ($records > $display) { // More than 1 page.
$pages = ceil ($records/$display);
} else {
$pages = 1;
}

} // End of p IF.

// Determine where in the database to start returning results...
if (isset($_GET['s']) && is_numeric($_GET['s'])) {
$start = $_GET['s'];
} else {
$start = 0;
}

// Determine the sort order...
// Default is by registration date.
$sort = (isset($_GET['sort'])) ? $_GET['sort'] : 'RECRUIT_TS';

// Determine the sorting order:
switch ($sort) {
case 'name':
$order_by = 'LASTNAME ASC';
break;
case 'dob':
$order_by = 'DOB ASC';
break;
case 'disease_1':
$order_by = 'DISEASE_1 ASC';
break;
case 'ADDRESS':
$order_by = 'ADDRESS ASC';
break;
case 'city':
$order_by = 'CITY ASC';
break;
case 'phone_1':
$order_by = 'PHONE_1 ASC';
break;
case 'email_1':
$order_by = 'EMAIL_1 ASC';
break;
default:
$order_by = 'RECRUIT_TS ASC';
$sort = 'RECRUIT_TS';
break;
}


// Make the query to build the table subsequently:



$sql = "SELECT CONCAT(LASTNAME, ', ', FIRSTNAME) AS name,
DATE_FORMAT(DOB,'%M-%d-%Y') AS dob,
DATE_FORMAT(RECRIT_TS,'%M-%d-%Y') AS reg_date,
DISEASE_1 as disease,
ADDRESS as ADDRESS,
CITY as city,
PHONE_1 as phone,
EMAIL_1 as email,
PID
FROM `demographics`
ORDER BY $order_by LIMIT $start, $display";

$result = $db->single($sql);


// Count the number of returned rows:
$num = $db->rowCount($result);

if ($num > 0) { // If it ran OK, display the records.




echo '

// Table header. Here the names of the fields have to be reported as they really are (so recruit_d remain recruit_d NOT reg_date)

<link rel="stylesheet" type="text/css" href= "http://10.0.0.1/public/css/tables.css" media="screen, tv, projection" title="Default" />
<link rel="stylesheet" type="text/css" href= "http://10.0.0.1/public/css/forms.css" media="screen, tv, projection" title="Default" />
<link rel="stylesheet" type="text/css" href= "http://10.0.0.1/public/css/validation.css" media="screen, tv, projection" title="Default" />

<body>
<div id="header" class="full">
<h1>List of Patients</h1>
<div id="inner_header" class="centered">
<ul>
<li><a href="home.php">Demographics</a></li>
<li><a href="#hp_php">History-Physical</a></li>
<li><a href="#biomark.php">Biomarkers</a></li>
<li><a href="#ecg.php">ECG</a></li>
<li><a href="#echo.php">ECHO</a></li>
<li><a href="#ct_rmn.php">CT-RMN</a></li>
</ul>
<br class="clear" />&nbsp;
</div>
</div>


<body>
';

// Print how many users there are:
echo "<p>There are currently <strong>$num</strong> patients in the DataBase.</p>\n";

echo '
<div id="table">
<table align="center" cellspacing="1" cellpadding="0" width="100%">
<tr>
<th>Details/Edit</th>
<th>Delete</th>
<th><a href="list_patients.php?sort=name">Name</a></th>
<th><a href="list_patients.php?sort=dob">Date of Birth</a></th>
<th><a href="list_patients.php?sort=recruit_d">Date Registered</a></th>
<th><a href="list_patients.php?sort=disease_1">Primary Disease</a></th>
<th><a href="list_patients.php?sort=ADDRESS">Address</a></th>
<th><a href="list_patients.php?sort=city">City</a></th>
<th><a href="list_patients.php?sort=phone_1">Phone Number</a></th>
<th><a href="list_patients.php?sort=email_1">Email</a></th>
</tr>
';

// Fetch and print all the records....

$bg = 'transparent'; // Set the initial background color.

while($row = $db->single(PDO::FETCH_ASSOC)) {


$bg = ($bg=='#eeeeee' ? '#ffffff' : '#eeeeee'); // Switch the background color (Ternary Operator).

// Be CAREFULL HERE: you have to report the fields with the names defined in the AS part of the query NOT their real names !
// so "recruit_d" becomes "reg_date", disease_1 simply disease, etc...
// Besides, pay attention on the occurrence of <a href="edit_patient.php?id=' . $row['pid'] . '" --> This define the $id var
// used later on to Update or Delete the patient !
echo '<tr bgcolor="' . $bg . '">
<td align="left"><a href="edit_patient.php?id=' . $row['pid'] . '"
style="background-color: transparent; color: #4169E1; font-weight: 700";>Details-Edit</a></td>
<td align="left"><a href="delete_patient.php?id=' . $row['pid'] . '"
style="background-color: transparent; color: #4169E1; font-weight: 700";>Delete</a></td>
<td align="left">' . $row['name'] . '</td>
<td align="left">' . $row['dob'] . '</td>
<td align="left">' . $row['reg_date'] . '</td>
<td align="left">' . $row['disease'] . '</td>
<td align="left">' . $row['ADDRESS'] . '</td>
<td align="left">' . $row['city'] . '</td>
<td align="left">' . $row['phone'] . '</td>
<td align="left">' . $row['email'] . '</td>
</tr>
';
} // End of WHILE loop

echo '
</table>
</div>
';




// Make the links to other pages, if necessary.
if ($pages >= 1) {

echo '<br /><p>';
$current_page = ($start/$display) + 1;

// If it's not the first page, make a Previous button:
if ($current_page != 1) {
echo '<a href="list_patients.php?s=' . ($start - $display) . '&p=' . $pages . '&sort=' . $sort . '">Previous</a> ';
}

// Make all the numbered pages:
for ($i = 1; $i <= $pages; $i++) {
if ($i != $current_page) {
echo '<a href="list_patients.php?s=' . (($display * ($i - 1))) . '&p=' . $pages . '&sort=' . $sort . '">' . $i . '</a> ';
} else {
echo $i . ' ';
}
} // End of FOR loop.

// If it's not the last page, make a Next button:
if ($current_page != $pages) {
echo '<a href="list_patients.php?s=' . ($start + $display) . '&p=' . $pages . '&sort=' . $sort . '">Next</a>';
}

echo '</p>'; // Close the paragraph.


} else { // If it did not run OK.



} // End of links section.




} // End of if $num > 0 IF

} catch (PDOException $e) {

echo '<p class="error"> An Error Occurred: ' . $e->getMessage() . '</p>'; // Report the Error

}
?>
<?php
// Let us include the footer
require_once '../elements/layouts/footer.php';
exit();
?>

这是我定义为 PDO 包装器的 class.DataBase

class dataBase extends PDO{
private $host = 'localhost';
private $user = 'root';
private $pass = '';
private $dbname = 'kardia';
private $port = '3306';

private $dbh;
private $error;

public function __construct(){
// Set DSN
$dsn = 'mysql:host=' . $this->host . ';dbname=' . $this->dbname . ';port' . $this->port;
// Set options (i.e. set PDO Attrbutes, to define what exceptions to catch)
$options = array(
PDO::ATTR_PERSISTENT => true,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
);
// Create a new PDO instance
try{
$this->dbh = new PDO($dsn, $this->user, $this->pass, $options);
}
// Catch any errors
catch(PDOException $e){
$this->error = '<p class="error"> An Error Occurred: ' . $e->getMessage() . '</p>';
}
}
// let us define the stmt attribute
private $stmt;

public function query($sql){
$this->stmt = $this->dbh->prepare($sql);
}

public function bind($param, $value, $type = null){
if (is_null($type)) {
switch (true) {
case is_int($value):
$type = PDO::PARAM_INT;
break;
case is_bool($value):
$type = PDO::PARAM_BOOL;
break;
case is_null($value):
$type = PDO::PARAM_NULL;
break;
default:
$type = PDO::PARAM_STR;
}
}
$this->stmt->bindValue($param, $value, $type);

}

public function execute(){
return $this->stmt->execute();
}

public function resultset(){
$this->execute();
return $this->stmt->fetchAll(PDO::FETCH_ASSOC);
}

public function single(){
$this->execute();
return $this->stmt->fetch(PDO::FETCH_ASSOC);
}

public function rowCount(){
return $this->stmt->rowCount();
}

public function lastId(){
return $this->dbh->lastInsertId();
}

public function debugDumpParams(){
return $this->stmt->debugDumpParams();
}

}

最佳答案

这段代码及其编写的风格有很多错误。

要回答有关调试问题的问题,请使用 print_r($data) 和 var_dump($data),其中 $data 是您想知道其值的任何内容。

此外,您不需要回显所有内容。您可以将 HTML 放入 PHP 文件中,只要它不在标签内,它仍然会呈现为 HTML。例如:

<?php 
// your PHP code
?>

<strong>Some HTML table code here.</strong>

<?php
// more PHP code here
?>

我首先会废弃所有表格和 HTML 代码,并确保使用数据库类从数据库中获取相关数据,并使用 print_r($data); 在 PHP 中打印结果

然后我会考虑将其放入工作 HTML 中。

关于php - 使用 PDO 从 MySQL 表中每页选择并显示 N=50 条记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26818031/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com