【问题标题】:Serach database not working in php pdo搜索数据库在 php pdo 中不起作用
【发布时间】:2016-06-06 12:28:23
【问题描述】:

请我一直在尝试在 php pdo 中进行搜索,但是当我搜索时它不起作用,它只会显示我搜索的当前标题。 我一直在使用 MYSQL,但在我的页面顶部显示错误,但搜索得非常好,就像我想要的那样请有人可以为我或 MYSQLI 将此 Mysql 转换为 PDO,但我更喜欢 PDO,因为我更了解它

这是我的 PHP 使用 mysql 进行搜索

<?php require_once("_inc/dbcontroller.php"); $db_handle = new DBController();?>
<?php
         if(isset($_GET['q'])){
        $button = mysql_real_escape_string($_GET ['t']);
        $search = mysql_real_escape_string($_GET ['q']); 
        $construct = "";
        if(!$search)
        echo 'The Query String field is required.';
        else{
        if(strlen($search)<=1)
        echo 'The Query String is too short.';
        else{
        echo "You searched for <b>$search</b> <hr size='1'></br>";
        mysql_select_db("your database name");
        $search_exploded = explode (" ", $search);

        foreach($search_exploded as $search_each){
        $x =0; $x++;
        if($x==1){$construct .="title LIKE '%$search_each%'";}
        else {
        $construct .="AND blog LIKE '%$search_each%' AND tags LIKE '%$search_each%'";
        }
        }
        $construct ="SELECT * FROM blogtd WHERE $construct AND action = 'active'";
        $run = mysql_query($construct);

        $foundnum = mysql_num_rows($run);
        if($foundnum==0)
        echo "Sorry, there are no matching result for";
        else{
        echo "We've found match";
        while($runrows = mysql_fetch_assoc($run)){
        $title = $runrows ['title'];
        $body = mysql_real_escape_string($runrows ['blog']);
        ?>
<div> 
<?php   
echo  $title."<br/>";
echo $body;
?></div>
     <?php
    }
    } 
    }
    }
     }
    ?>

这是我的数据库控制器,我将它保存在不同的文件夹中_inc/dbcontroller.php

<?php
class DBController {
//include('Define.php');
    private $host = "localhost";
    private $user = "root";
    private $password = "12345";
    private $database = "ServerDBsclab";

    function __construct() {
        $db_conn = $this->connectDB();
        if(!empty($db_conn)) {
            $this->selectDB($db_conn);
        }
    }

    function connectDB() {
        $db_conn = mysql_connect($this->host,$this->user,$this->password);
        return $db_conn;
    }

    function selectDB($db_conn) {
        mysql_select_db($this->database,$db_conn);
    }

    function runQuery($query) {
        $result = mysql_query($query);
        while($row=mysql_fetch_assoc($result)) {
            $resultset[] = $row;
        }       
        if(!empty($resultset))
            return $resultset;
    }

    function numRows($query) {
        $result  = mysql_query($query);
        $rowcount = mysql_num_rows($result);
        return $rowcount;   
    }

    function updateQuery($query) {
        $result = mysql_query($query);
        if (!$result) {
            die('Invalid query: ' . mysql_error());
        } else {
            return $result;
        }
    }

    function insertQuery($query) {
        $result = mysql_query($query);
        if (!$result) {
            die('Invalid query: ' . mysql_error());
        } else {
            return $result;
        }
    }

    function deleteQuery($query) {
        $result = mysql_query($query);
        if (!$result) {
            die('Invalid query: ' . mysql_error());
        } else {
            return $result;
        }
    }

}
$db_conn = null;

?>

这是我尝试使用但无法正常工作的 php pdo,请帮助我,这样它就可以像上面的代码一样工作

<?php
if(isset($_GET['postid'])){
    echo '<h5 style="color: #2f2f2f;">Search</h5><br/>';
    $matchpost = $blog_title;
    $button = mysql_real_escape_string($_GET['postid']);
$q = $blog_title;
$search_output = "";
// Prepare statement
$db_conn = new PDO('mysql:host='.DB_HOST.';dbname='.DB_NAME,DB_USERNAME,DB_PASSWORD);
$db_conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$search = $db_conn->prepare("SELECT * FROM `blogtd` WHERE `blog` LIKE ?");
$search->execute(array("%$q%"));

foreach($search as $s){
    $id = $s["BID"];
    $title = $s["blog"];
    $body = substr($s["body"], 0, 50);
    $search_output .= '<article>
      <header><a href="'.$id.'">
        <h5>'.$title.'</h5>
        </a></header>
      <p>'.$body.'...</p></article>';
  } 
  echo $search_output;

}
?>

【问题讨论】:

  • "有人可以为我或 MYSQLI 将此 Mysql 转换为 PDO,但我更喜欢 PDO,因为我更了解它" - Stack 不是转换服务。
  • 我知道我只是想问是否有人可以帮助我使用 pdo 进行 php 搜索,这非常重要这是我最后一年的项目@Fred-ii-
  • 您需要做的是:不要混合使用不同的 MySQL API。一旦你从连接到查询都使用了同一个,你就会成功。
  • @Fred-ii- 我不明白你的意思(不要混合不同的 MySQL API。一旦你从连接到查询使用了同一个,你就会成功)请如有必要,如果您给我解释代码,我将不胜感激
  • mysql_ + PDO = 没有爱。 mysqli_ + PDO = 没有爱。 mysql_ + mysqli_ = 没有爱 ;-)

标签: php mysql search mysqli pdo


【解决方案1】:

每个人都在说。将所有内容保留 1 个扩展名。如果您使用 PDO,请在 PDO 中执行所有操作。如果你使用 mysqli。在 mysqli 中执行所有操作。永远不要使用mysql。 (我们现在生活在 2016 年)。

我只查看您的 PDO 代码。看来您缺少一些代码,您想如何获取 mysql 数据。你什么都不拿。我为您创建了一个类似的脚本,它的工作方式略有不同。包括我的 PDO 课程。在您自己的服务器上测试它并检查它是否正常工作。

_inc/dbcontroller.php

<?php
class DBController{

    private $conn;
    public $error;

    private $stmt;

    public function __construct(){
        $driver = 'mysql';
        $host = 'localhost';
        $port = 3306;
        $user = 'user';
        $pass = 'pass';
        $db = 'mydb';
        $dsn = $driver.':host='.$host.';port='.$port.';dbname='.$db;
        // Set options
        $options = array(
            PDO::ATTR_PERSISTENT    => true,
            PDO::ATTR_ERRMODE       => PDO::ERRMODE_EXCEPTION
        );
        try{
            $this->conn = new PDO($dsn, $user, $pass, $options);
        }
        catch(PDOException $e){
            $this->error = $e->getMessage();
        }
    }


    public function error(){
        return $this->stmt->errorInfo();
    }

    public function errorInfo(){
        return $this->stmt->errorInfo();
    }

    public function prepare($query){
        $this->stmt = $this->conn->prepare($query);
    }

    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 rowCount(){
        return $this->stmt->rowCount();
    }

    public function getOne(){
        return $this->stmt->fetch(PDO::FETCH_OBJ);
    }

    public function getAll(){
        return $this->stmt->fetchAll(PDO::FETCH_OBJ);
    }

    public function getAllObject(){
        $result = new stdClass;
        $count = 0;
        while($row = $this->stmt->fetchObject()){
            $count++;
            $result->$count = $row;
        }
        return $result;
    }

    public function getLastInsertId(){
        return $this->conn->lastInsertId();
    }

    public function free(){
        $this->stmt = null;
    }
}

你的通话文件

<?php


$search = filter_input(INPUT_GET, 'q');
$output;

if(!empty($search)){
    require_once("_inc/dbcontroller.php");
    $db_handle = new DBController();
    $db_handle->prepare('SELECT * FROM blogtd WHERE blog LIKE :search');
    $db_handle->bind(':search', '%'.$search.'%');
    $db_handle->execute();
    $output = $db_handle->getAll(); // This is the thing i'm missing in your script.
    $db_handle->free();
}

if(!is_null($output)):
    $html = '';
    foreach($output as $i => $row){
        $id = $row->BID;
        $title = $row->blog;
        $body = substr($row->body, 0, 50);
        $html .= '
            <article>
                <header>
                    <a href="'.$id.'"><h5>'.$title.'</h5></a>
                </header>
                <p>'.$body.'</p>
            </article>';
    }
    echo $html;
else: ?>
<form id='searchform' method="GET" target="#">
    <input type='text' name='q' value=''/>
    <input type='submit' value='search'/>
</form><?php
endif;

【讨论】:

  • 我应该用当前的 DBcontroller 替换我的 DBcontroller 吗?
  • 您可以使用一个文件中的所有内容进行测试。 pdo 类替换了您的 DBcontroller 是的。
  • 我使用它并且工作得很好,那么我怎样才能在所有页面中使用呢? &lt;?php require_once("_inc/dbcontroller.php"); $db_handle = new dbo();?&gt; 我是否需要在页面顶部替换此 &lt;?php require_once("_inc/dbcontroller.php"); $db_handle = new DBController();?&gt;
  • 确实编辑了我对如何适应您的代码的回答。希望这是你需要的。
  • 我只是用你自己的数据库控制器替换了我的数据库控制器,但是我在以前的代码中给出了很多错误,如果你能帮助解决它,我将不胜感激
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-09-26
  • 2014-05-25
  • 2013-05-25
  • 2011-10-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多