【问题标题】:How to fix Notice: Object of class PDOStatement could not be converted to int如何修复注意:类 PDOStatement 的对象无法转换为 int
【发布时间】:2017-08-27 12:04:09
【问题描述】:

我刚学了php在页面上显示信息,报错了,请帮帮我..谢谢

这个文件politik.php

<?php
  include 'koneksi.php';

  $tabel1 = 'isiberita';
  $tabel2 = 'kategori';
  $id=1;

  $hal = $_GET['hal']; //*Error : Notice: Undefined index: hal ???
  //validasi halaman
  if (!isset($_GET['hal'])) {
          $page = 1;
  } else {
    $page = $_GET['hal'];
  }
  //data tampil perhalaman
  $max_result = 2;

  $from = (($page * $max_result) - $max_result);

  //query tampil perhalaman
  $sql=$conn->query("SELECT * FROM  $tabel1,$tabel2 where $tabel1.id_kategori=$id and $tabel1.id_kategori=$tabel2.id_kategori
                    ORDER BY tanggal DESC LIMIT $from,$max_result");
while ($tampil = $sql->fetch(PDO::FETCH_ASSOC))
{

      $data = substr($tampil['isi'],0,200);
      echo "<div class='box'>";
      echo "<p align='justify'>";
      echo "<img class='gambar' src='$tampil[gambar]' width=150px height=150px align='left' />";
      echo "<font valign='top'>";
      echo "<strong>";
      echo $tampil['judul'];
      echo "</strong>";
      echo $data;

      echo "<a href='index.php?menu=detail_politik&id==$tampil[id_berita]'>  baca lengkap>>>></a>";
      echo "</font></p></div><br>";
}

//total
$total_result = $conn->query("SELECT count(*) as Num From $tabel1 where $tabel1.id_kategori=$id");
//Notice: Object of class PDOStatement could not be converted to int ??
$total_pages = ceil($total_result / $max_result);

echo "<center> piliih Halaman <br />";
//proses link
if ($hal > 1) {
  $prev = ($page - 1);
  echo "<a href=$_SERVER[PHP_SELF]?menu=politik&hal$prev>
        <-Sebelumnya </a>";
}

//link daftar urutan Halaman
for ($i=1; $i <= $total_pages; $i++) {
        if (($hal)==$i) {
          echo "$i";
        } else {
          echo "<a href=$_SERVER[PHP_SELF]?menu=politik&hal=$i>$i</a>";
        }
      }
        //link halaman selanjutnya
        if ($hal < $total_pages) {
          $next = ($page + 1);
          echo "<a href=$_SERVER[PHP_SELF]?menu=politik&hal=$next>Selanjutnya-></a>";
        }

      echo "</center>";

?>

我跟着这本书,这是原来的脚本:

$total_result = mysql_result(mysql_query("SELECT count(*) as Num From $tabel1 where $tabel1.id_kategori=$id"),0);

【问题讨论】:

    标签: php mysql database pdo


    【解决方案1】:

    以下几行

    $total_result = $conn->query("SELECT count(*) as Num From $tabel1 where $tabel1.id_kategori=$id");
    $total_pages = ceil($total_result / $max_result);
    

    ..您正在尝试获取计数,但将生成的查询对象视为您想要的结果。您需要先获取数据才能使用它,因此

    $total_result = $conn->query("SELECT count(*) as Num From $tabel1 where $tabel1.id_kategori=$id");
    $total_result_fetched = $total_result->fetch(PDO::FETCH_ASSOC);
    $total_pages = ceil($total_result_fetched['Num'] / $max_result);
    

    注意fetch()$total_result_fetched 变量现在是一个数组。

    您还会接触到 SQL 注入,因为您直接在查询中使用变量。您应该使用准备好的陈述来保护自己免受这种情况的影响。表名和列名不能绑定,因此至少应该将它们列入白名单。使用prepare()execute(),可以绑定如下所示的值

    $total_result = $conn->prepare("SELECT count(*) as Num From $tabel1 where $tabel1.id_kategori=:id");
    $total_result->execute(["id" => $id]);
    $total_result_fetched = $total_result->fetch(PDO::FETCH_ASSOC);
    $total_pages = ceil($total_result_fetched['Num'] / $max_result);
    

    查阅以下主题和文档

    【讨论】:

    • 我认为您应该回顾一下 OP 过去的一些问题。其中一些看起来很像他们在这里发布的那个。让我们看看他们是否接受这个答案。
    • 在那段历史上没有接受,所以我对此表示怀疑,但我们拭目以待。其他问题是相关的,但他们使用 mysql_ 而不是 PDO。所以我猜有些事情发生了变化。
    • 有些东西已经改变了 次 ;-)
    • @Qirel 这行得通谢谢你的帮助,对不起,打扰你了:-)我必须了解更多。
    【解决方案2】:
    //FIX ERROR:  from error object of class PDOStatement could not be converted to number. 
    

    试试这个:

    $query = $connection->query("SELECT count(*) as Num From tbl_blog");
    
    $num   = $query->fetch(PDO::FETCH_ASSOC);
    
    $total_laman  = ceil($num ['Num'] / $per_laman);
    

    【讨论】:

      猜你喜欢
      • 2013-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-29
      • 1970-01-01
      • 1970-01-01
      • 2019-05-02
      • 2020-05-18
      相关资源
      最近更新 更多