繁体   English   中英

将MySQL连接器转换为PDO

[英]Converting MySQL connector to PDO

在上一个线程中征求了一些人的建议之后,我试图将我的MySQL转换为PDO,但遇到了一些问题。

这是我原始的MySQL连接类:

class DbConnector {

    public static function getInstance() {
        static $instance = null;
        if ($instance === null) {
            $instance = new DbConnector();
        }

        return $instance;
    }

    protected $theQuery;
    private $link;

    function DbConnector() {

        $host = 'localhost';
        $db = '';
        $user = '';
        $pass = '';

        // connect to the db
        $this->link = mysql_connect($host, $user, $pass);
        mysql_select_db($db);
        register_shutdown_function(array(&$this, 'close'));
    }

    public function find($query) {
        $ret = mysql_query($query, $this->link);
        if (mysql_num_rows($ret) == 0)
            return array();
        $retArray = array();

        while ($row = mysql_fetch_array($ret))
            $retArray[] = $row;

        return $retArray;
    }

    public function insert($query) {
        $ret = mysql_query($query, $this->link);

        if (mysql_affected_rows() < 1)
            return false;
        return true;
    }

    public function query($query) {
        $this->theQuery = $query;
        return mysql_query($query, $this->link);
    }

    public function fetchArray($result) {
        return mysql_fetch_array($result);
    }

    public function close() {
        mysql_close($this->link);
    }

    public function exists($query) {
        $ret = mysql_query($query, $this->link);
        if (mysql_num_rows($ret) == 0)
            return false;
    }

    public function last_id($query) {
        return mysql_insert_id($query);
    }

}

这是我正在编写的函数:

function getRandomSubmission() {
    global $db;

    if(!empty($_GET['id'])){
        $submission_id = $_GET['id'];

        $query = $db->find("
            SELECT
                *
            FROM
                `submissions`
            WHERE id = '{$submission_id}'
            LIMIT 1
        ");

    }
    else {
        $query = $db->find("
            SELECT
                *
            FROM
                `submissions`
            ORDER BY RAND()
            LIMIT 1
        ");
    }


    if($query) {
        return $query[0];
    }
    else {
        $query = $db->find("
            SELECT
                *
            FROM
                `submissions`
            ORDER BY RAND()
            LIMIT 1
        ");
    }
}

这是PDO连接器:

$host = 'localhost';
$username = '';
$pass = '';
$db = '';

try {
    $dbh = new PDO("mysql:host=$host;dbname=$db", $username, $pass);
} catch (PDOException $e) {
    echo $e->getMessage();
}

这是我尝试将其转换为的内容,但这完全是错误的。 我想我需要在第二个if语句中返回PDO关联数组,但不确定。

function getRandomSubmission() {
    global $dbh;

    if(!empty($_GET['id'])){
        $submission_id = $_GET['id'];

    $stmt = $dbh->prepare('
            SELECT
                *
            FROM
                `submissions`
            WHERE
                `id` = ?
            LIMIT 1
            ');

    $stmt->bindParam(1, $submission_id, PDO::PARAM_INT);
    $stmt->execute();
    }
    else {
    $stmt = $dbh->prepare('
            SELECT
                *
            FROM
                `submissions`
            ORDER BY RAND()
            LIMIT 1
        ');

    $stmt->execute();
    }


    if($stmt) {
        return $stmt[0];
    }
    else {
    $stmt = $dbh->prepare('
            SELECT
                *
            FROM
                `submissions`
            ORDER BY RAND()
            LIMIT 1
        ');

    $stmt->execute();
    }
}

但是,原始版本可以按预期工作(我知道我将连接详细信息留为空白)。

您需要调用PDOStatement对象的访PDOStatement方法:

return $stmt->fetch()

阅读有关访存样式的信息,实际上您不需要FETCH_BOTH ;-)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM