php - 如何修复通知 : Object of class PDOStatement could not be converted to int

标签 php mysql database pdo

刚学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);

this Output

最佳答案

在下面几行

$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 注入(inject),因为您直接在查询中使用变量。您应该使用准备好的语句 来保护自己免受这种情况的影响。表名和列名不能绑定(bind),所以至少应该将它们列入白名单。使用 prepare()execute(),您可以如下所示绑定(bind)值

$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);

查阅以下主题和文档

关于php - 如何修复通知 : Object of class PDOStatement could not be converted to int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45904758/

相关文章:

php - 无法连接到数据库。不会停止加载

php - 将自定义字体图标添加到视觉 Composer

mysql - mysql中是否有类似于oracle rowtype的类型定义

MySQL 无法使用我创建的用户

sql - 用空格替换引号之间的逗号

php - zend框架报错

php - 在 php 中将变量转换为 boolean 值的最佳方法是什么?

mysql - 使用jsp在mysql数据库中插入引导日期选择器日期

mysql - mysql 更新未提交

php - 测验的数据库结构是什么样的?