0

我有这个使用 PHP PDO 访问 MySQL 数据库的脚本,但问题是我的托管服务提供商禁用了 PHP PDO,所以现在我被卡住了,不知道如何更改此代码以在没有 PHP PDO 的情况下访问数据库:

<?php

    class DbHandler {

        private $dbname = '**********';
        private $host = '**********';
        private $user = '**********';
        private $pass = '**********';
        public $dbh;
        private $sth;

        public function __construct()
        {
            try{
                $this->dbh = new PDO("mysql:$this->host=localhost;dbname=$this->dbname", $this->user, $this->pass);
            }
            catch(PDOException $e){
                echo 'Unable to connect to database!';
            }
        }

        // Retrive all replays from the database
        public function selectAll($offset, $rowsperpage){

            $this->sth = $this->dbh->query("SELECT game_id, game_title,game_date_upload,game_file_name FROM games ORDER BY game_id DESC LIMIT $offset, $rowsperpage");
            $this->sth->setFetchMode(PDO::FETCH_ASSOC);
            $replays = $this->sth->fetchAll();

            return $replays;
        }

        // Return number of replays from db
        public function numOfReplays(){
            $this->sth = $this->dbh->query("SELECT game_id FROM games");
            $this->sth->setFetchMode(PDO::FETCH_ASSOC);
            $replays = $this->sth->fetchAll();
            $numOfReplays = count($replays);
            return $numOfReplays;
        }

        // Search db
        public function search1($search_text, $offset, $rowsperpage){
            $this->sth = $this->dbh->query("SELECT game_id, game_title,game_date_upload,game_file_name FROM games WHERE game_title LIKE '%$search_text%' ORDER BY game_id DESC LIMIT $offset, $rowsperpage");
            $this->sth->setFetchMode(PDO::FETCH_ASSOC);
            $replays = $this->sth->fetchAll();
            return $replays;
        }

        public function search($search_text, $offset, $rowsperpage){
            $search_text = '%' . $search_text . '%';
            $this->sth=$this->dbh->prepare("SELECT game_id, game_title,game_date_upload,game_file_name FROM games WHERE game_title LIKE ? ORDER BY game_id DESC LIMIT $offset, $rowsperpage");
            $this->sth->setFetchMode(PDO::FETCH_ASSOC);
            $this->sth->execute(array($search_text));
            $replays = $this->sth->fetchAll();
            return $replays;
        }

        public function numOfSearchResults($search_text){
            $search_text = '%' . $search_text . '%';
            $this->sth = $this->dbh->prepare("SELECT game_id FROM games WHERE game_title LIKE ?");
            $this->sth->setFetchMode(PDO::FETCH_ASSOC);
            $this->sth->execute(array($search_text));
            $replays = $this->sth->fetchAll();
            $numOfReplays = count($replays);
            return $numOfReplays;
        }

        // Retrieve last five uploaded replays
        public function latestReplays(){
            $this->sth = $this->dbh->query("SELECT game_title,game_file_name FROM games ORDER BY game_date_upload DESC LIMIT 2");
            $this->sth->setFetchMode(PDO::FETCH_ASSOC);
            $lastReplays = $this->sth->fetchAll();

            return $lastReplays;
        }

        // Insert replay data in db
        public function exec($data=array())
        {
            $this->sth = $this->dbh->prepare("INSERT INTO games(game_title,game_description,game_file_name) values(?,?,?)");
            $this->sth->execute($data);
        }
    }
?>

我的数据库工作正常,因为我使用了这个 MySQL 测试脚本来连接它并且它工作正常:

<?php
    mysql_connect("myhost.com", "username", "password") or die(mysql_error());
    echo "Connected to MySQL<br/>";
?>
4

2 回答 2

2

如果您的主机已禁用 PDO,我强烈建议您切换主机!

如果这不可能,您可以将 PDO 函数替换为 mysqli* 函数。

例子:

class DbHandler
{

  private $dbname = '**********';
  private $host = '**********';
  private $user = '**********';
  private $pass = '**********';

  public  $dbh;
  private $sth;

  public function __construct()
  {
    $this->dbh = new mysqli( $this->host, $this->user, $this->pass, $this->dbname);
  }

  ...
} 
于 2012-10-06T08:07:14.977 回答
0

正如 JvdBerg 所说,您可以切换主机或更改为MySQLi

这是从 PDO 到 MySQLi 的快速更改

$this->dbh = new PDO("mysql:$this->host=localhost;dbname=$this->dbname", $this->user, $this->pass);`

$this->dbh = new mysqli($this->host,$this->user,$this->pass,$this->dbname);

$this->sth = $this->dbh->query("SELECT game_id, game_title,game_date_upload,game_file_name FROM games ORDER BY game_id DESC LIMIT $offset, $rowsperpage");
$this->sth->setFetchMode(PDO::FETCH_ASSOC);
$replays = $this->sth->fetchAll();

$this->sth = $this->dbh->query("SELECT game_id, game_title,game_date_upload,game_file_name FROM games ORDER BY game_id DESC LIMIT $offset, $rowsperpage");
$replays = $this->sth->fetch_all(MYSQLI_ASSOC);

冲洗,起泡,对其余的类方法重复。

于 2012-10-06T08:14:46.503 回答