Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php PDO分页错误_Php_Mysql_Pdo_Pagination - Fatal编程技术网

Php 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

我一直在使用pdo进行分页,但我似乎无法通过这一部分。我查阅了其他帖子和教程,但我遇到了麻烦,有人能帮忙吗**已添加编辑完整代码,已添加更新,但仍有错误

<?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时出现问题,刚刚更新。您需要从该查询中获取结果。现在尝试更新代码。