Php PDO分页错误
我一直在使用pdo进行分页,但我似乎无法通过这一部分。我查阅了其他帖子和教程,但我遇到了麻烦,有人能帮忙吗**已添加编辑完整代码,已添加更新,但仍有错误Php PDO分页错误,php,mysql,pdo,pagination,Php,Mysql,Pdo,Pagination,我一直在使用pdo进行分页,但我似乎无法通过这一部分。我查阅了其他帖子和教程,但我遇到了麻烦,有人能帮忙吗**已添加编辑完整代码,已添加更新,但仍有错误 <?php try{ $handler = new PDO('mysql:host=127.0.0.1;dbname=clients','root',''); $handler->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch(PDOE
<?php
try{
$handler = new PDO('mysql:host=127.0.0.1;dbname=clients','root','');
$handler->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e){
echo $e->getMessage();
die();
}
?>
<html>
<head>
<link rel="stylesheet" type="text/css" href="mystyle.css">
</head>
<body bgcolor="#F5F1DE">
<div class="center">
<br>
<br>
<br>
<br>
<br>
<h2> Business Listings</h2>
<table border="1" style="width:50%">
<tr>
<?php
$per_page = 10;
$NoofRecords = $handler->query('SELECT COUNT(CompID) FROM Listings;');
$pages = ceil($NoofRecords / $per_page);
if(!isset($_GET['page'])){
header(":location: Listings.php?page=1");
}
else{
$page =$_GET['page'];
}
$start = (($page - 1)*$per_page);
echo "SELECT * FROM listings WHERE Accept=1 ORDER BY Premium LIMIT $start,$per_page;";
$query = $handler->query("SELECT * FROM listings WHERE Accept=1 ORDER BY Premium LIMIT $start,$per_page;");
while($r = $query->fetch()) {
echo '<td>', $r['Name'], '</td>','<td>', $r['Email'], '</td>','<td>', $r['Phone'], '</td>',
'<td>','<a href="' . $r['Name'] . '.php">Company page</a>', '</td>';
echo '</tr>';
}
for($number=1;$number<=$pages;$number++)
{
echo '<a href="?page'.$number.'">.$number. </a>';
}
echo"<BR>Current Page: $page"
?>
</table>
</Div>
</div>
</div>
</body>
</html>
企业上市
在字符串中使用变量时,请使用双引号“
而不是单引号”
:
"SELECT * FROM listings WHERE Accept=1 ORDER BY Premium LIMIT $start,$per_page;"
限制在查询的最后
SELECT * FROM listings WHERE Accept=1 ORDER BY Premium LIMIT $start,$per_page ;
您还需要使用双引号,正如Crystal为PHP指出的那样,来处理变量。您应该使用准备好的语句,尽管这对注入是开放的
已更新,但未准备好您仍应使用的语句
<?php
try{
$handler = new PDO('mysql:host=127.0.0.1;dbname=clients','root','');
$handler->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e){
echo $e->getMessage();
die();
}
$per_page = 10;
$NoofRecords = $handler->query('SELECT COUNT(CompID) as counted FROM Listings;');
$fetchdata = $NoofRecords->fetch();
$recordcount = $fetchdata['counted'];
$pages = ceil($recordcount / $per_page);
if(empty($_GET['page'])){
//this is a waste if this page is listings.php, just set $page to 1;
header("Location: Listings.php?page=1");
} else{
$page = $_GET['page'];
}
$start = (($page - 1)*$per_page);
echo "SELECT * FROM listings WHERE Accept=1 ORDER BY Premium LIMIT $start,$per_page;";
$query = $handler->query("SELECT * FROM listings WHERE Accept=1 ORDER BY Premium LIMIT $start,$per_page;");
while($r = $query->fetch()) {
$table_contents = '<tr><td>' . $r['Name'] . '</td><td>' . $r['Email'] . '</td><td>'. $r['Phone'] . '</td><td><a href="' . $r['Name'] . '.php">Company page</a></td></tr>';
}
?>
<html>
<head>
<link rel="stylesheet" type="text/css" href="mystyle.css">
</head>
<body bgcolor="#F5F1DE">
<div class="center">
<br>
<br>
<br>
<br>
<br>
<h2> Business Listings</h2>
<table border="1" style="width:50%">
<?php echo $table_contents; ?>
</table>
<?php
for($number=1;$number<=$pages;$number++) {
echo '<a href="?page'.$number.'">'.$number. '</a>';
}
echo "<BR>Current Page: $page"; ?>
</div>
</div><!-- I dont know what these 2 divs are for... -->
</div>
</body>
</html>
企业上市
将查询行更改为:查询语法错误
$query = $handler->query("SELECT * FROM listings WHERE Accept=1 ORDER BY Premium LIMIT $start,$per_page");
除了其他答案中提到的sql问题(
LIMIT
,最后用双引号引起来,以便可以在字符串中使用变量),您已经遇到了一个早期问题:
$pages = ceil(($NoofRecords,0)/$per_page);
^^^^^^^^^^^^^^^^ What is supposed to happen here?
,0
部分使整个语句无效
你只需要:
$pages = ceil($NoofRecords / $per_page);
这部分有什么问题?在第34行,它不喜欢ceil的语法,在第43行,它抱怨AO,但有一个未定义的变量adn,然后是“致命错误:未捕获异常'PDOException',消息'SQLSTATE[42000]:语法错误或访问冲突:1327未声明变量:$start'位于C:\wamp\www\Myserver\Listings.php的第45行(!)PDOException:SQLSTATE[42000]:语法错误或访问冲突:1327未声明变量:$start位于C:\wamp\www\Myserver\Listings.php的第45行“在pdo代码周围放置一个try-catch块。var_转储异常,您将看到哪里出了问题代码>给你什么?你能链接到教程吗?也许看到原始代码会使调试更快?@chris85修复了SQL语句。希望这有帮助!已更改的查询仍有错误,“类PDOStatement的对象无法转换为int行34”和未定义的变量行43会回显该语句,并查看要发送到DB的内容<代码>echo“从列表中选择*,其中接受=1按溢价限额订购$start$每页;”代码>你有剩下的代码吗?这里只有27行。它给出了输出“SELECT*FROM listings WHERE Accept=1 ORDER BY Premium LIMIT-10,10”;谢谢,这是有效的,但是在页面内容后面的背景中隐藏了一个错误。错误是什么?确保删除
echo“从列表中选择*,其中Accept=1 ORDER BY Premium LIMIT$start$per_page;”代码>。输出内容是将来诊断和解决错误的一种好方法。它返回了一个错误“第11行的C:\wamp\www\Myserver\Listings.php中的类PDOStatement对象无法转换为int”将“$pages=ceil($NoofRecords/$per_page);”转换为intYes时出现问题,刚刚更新。您需要从该查询中获取结果。现在尝试更新代码。