Serach数据库无法在php pdo中运行

时间:2016-06-06 12:28:24

标签: php mysql search mysqli pdo

请问我一直在尝试在php pdo中进行搜索但是当我搜索时它不起作用它只会显示我搜索的当前标题。 我一直在使用MYSQL,但在我的页面顶部显示错误但是搜索非常好,我希望它可以请有人将这个Mysql转换为PDO为我或MYSQLI但我更喜欢PDO因为我理解它更多

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

<head runat="server">
    <title></title>
    <script src="https://code.jquery.com/jquery-1.12.2.min.js"></script>
    <script>
        $(function () {  
            $("#gvItems > tbody > tr").each(function (i, row) {
                var children = $(row).children();
                for(var i=0; i < children.length;i++)
                {
                    var child = children[i];
                    if(child.localName == "td")
                    {
                        var text = $(child).text();

                        if(text == "23")
                        {
                            $(child).css("background-color", "red");
                        }
                        else if(text == "43")
                        {
                            $(child).css("background-color", "green");
                        }
                    }
                }
            });
        });
    </script>
</head>
<body>
    <form id="form1" runat="server">
        <div>
            <asp:GridView ID="gvItems" runat="server"></asp:GridView>
        </div>
    </form>
</body>

这是我的db-controller,我把它保存在另一个文件夹 _inc / dbcontroller.php

<?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
    }
    } 
    }
    }
     }
    ?>

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

<?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;

?>

1 个答案:

答案 0 :(得分:0)

每个人都在说。将所有内容保留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;