开发者

Converting MySQL connector to PDO

After taking some advice from people on here in a previous thread, I'm trying to convert my MySQL to PDO, but am running into some issues.

Here is my original MySQL connection class:

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(&a开发者_Python百科mp;$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);
    }

}

Here is the function that I'm writing:

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
        ");
    }
}

Here is the PDO connector:

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

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

Here is what I've tried to convert it to, but it's just plain wrong. I think I need to be returning a PDO associative array in the 2nd if statement, but am not sure.

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();
    }
}

The original one works as intended, however (I realize I left the connection details blank).


You need to call fetch method of the PDOStatement object:

return $stmt->fetch()

Read about the fetch style, really you don't need FETCH_BOTH ;-)

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜