- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在编写一个脚本,该脚本查询 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" />
</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/
我在 JavaScript 文件中运行 PHP,例如...... var = '';). 我需要使用 JavaScript 来扫描字符串中的 PHP 定界符(打开和关闭 PHP 的 )。 我已经知道使
我希望能够做这样的事情: php --determine-oldest-supported-php-version test.php 并得到这个输出: 7.2 也就是说,php 二进制检查 test.
我正在开发一个目前不使用任何框架的大型 php 站点。我的大问题是,随着时间的推移慢慢尝试将框架融入应用程序是否可取,例如在创建的新部件和更新的旧部件中? 比如所有的页面都是直接通过url服务的,有几
下面是我的源代码,我想在同一页面顶部的另一个 php 脚本中使用位于底部 php 脚本的变量 $r1。我需要一个简单的解决方案来解决这个问题。我想在代码中存在的更新查询中使用该变量。 $name)
我正在制作一个网站,根据不同的情况进行大量 PHP 重定向。就像这样...... header("Location: somesite.com/redirectedpage.php"); 为了安全起见
我有一个旧网站,我的 php 标签从 因为短标签已经显示出安全问题,并且在未来的版本中将不被支持。 关于php - 如何避免在 php 文件中写入
我有一个用 PHP 编写的配置文件,如下所示, 所以我想用PHP开发一个接口(interface),它可以编辑文件值,如$WEBPATH , $ACCOUNTPATH和 const值(value)观
我试图制作一个登录页面来学习基本的PHP,首先我希望我的独立PHP文件存储HTML文件的输入(带有表单),但是当我按下按钮时(触发POST到PHP脚本) )我一直收到令人不愉快的错误。 我已经搜索了S
我正在寻找一种让 PHP 以一种形式打印任意数组的方法,我可以将该数组作为赋值包含在我的(测试)代码中。 print_r 产生例如: Array ( [0] => qsr-part:1285 [1]
这个问题已经有答案了: 已关闭11 年前。 Possible Duplicate: What is the max key size for an array in PHP? 正如标题所说,我想知道
我正在寻找一种让 PHP 以一种形式打印任意数组的方法,我可以将该数组作为赋值包含在我的(测试)代码中。 print_r 产生例如: Array ( [0] => qsr-part:1285 [1]
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 9 年前。 Improve this ques
我在 MySQL 数据库中有一个表,其中存储餐厅在每个工作日和时段提供的菜单。 表结构如下: i_type i_name i_cost i_day i_start i_
我有两页。 test1.php 和 test2.php。 我想做的就是在 test1.php 上点击提交,并将 test2.php 显示在 div 中。这实际上工作正常,但我需要向 test2.php
我得到了这个代码。我想通过textarea更新mysql。我在textarea中回显我的MySQL,但我不知道如何更新它,我应该把所有东西都放进去吗,因为_GET模式没有给我任何东西,我也尝试_GET
首先,我是 php 的新手,所以我仍在努力学习。我在 Wordpress 上创建了一个表单,我想将值插入一个表(data_test 表,我已经管理了),然后从 data_test 表中获取所有列(id
我有以下函数可以清理用户或网址的输入: function SanitizeString($var) { $var=stripslashes($var); $va
我有一个 html 页面,它使用 php 文件查询数据库,然后让用户登录,否则拒绝访问。我遇到的问题是它只是重定向到 php 文件的 url,并且从不对发生的事情提供反馈。这是我第一次使用 html、
我有一个页面充满了指向 pdf 的链接,我想跟踪哪些链接被单击。我以为我可以做如下的事情,但遇到了问题: query($sql); if($result){
我正在使用 从外部文本文件加载 HTML/PHP 代码 $f = fopen($filename, "r"); while ($line = fgets($f, 4096)) { print $l
我是一名优秀的程序员,十分优秀!