从mysql_connect切换到PDO:mysql_num_rows()期望参数1是资源

时间:2014-03-21 23:34:50

标签: php mysql pdo

我有使用mysql_connect的代码,我理解现在已弃用,我切换到以下代码(我在本地工作):

<?php

/*** mysql hostname ***/
$hostname = 'localhost';

/*** mysql username ***/
$DBusername = 'admin';

/*** mysql password ***/
$DBpassword = '';

try {
    $dbh = new PDO("mysql:host=$hostname;dbname=mysql", $DBusername, $DBpassword);
    /*** echo a message saying we have connected ***/
    echo 'Connected to database';
    }
catch(PDOException $e)
    {
    echo $e->getMessage();
    }
?>

但现在这意味着我的一个功能会破坏:

$result = mysql_num_rows($query);

因为在脚本之后,连接无法正常工作。我的PDO连接脚本有一些东西,但我不明白我做错了什么。在localhost上登录phpMyAdmin的详细信息是正确的。

function user_exists($username){
        $sql = "SELECT `id` FROM `users` WHERE `username` = '".$username."'";
        $query = mysql_query($sql);
        $result = mysql_num_rows($query);

        if($result == 1){
            // username does already exist
            return true;
        }else{
            // username doesn't exist in the database
            return false;
        }
    }

1 个答案:

答案 0 :(得分:3)

PDO完全独立于mysql扩展名,您还必须更新函数调用。例如mysql_query应该是prepareexecute的组合。

作为注释:请使用准备好的语句,您的示例查询是完全不安全的。

要求提供一个例子:

// initialize PDO
$dbh = new PDO("mysql:host=$hostname;dbname=mysql", $DBusername, $DBpassword);

// Prepare a query
$sql = "SELECT COUNT(*) AS count
        FROM   users
        WHERE  username = ?
        LIMIT  1";
$statement = $dbh->prepare($sql);

// execute the query
$statement->execute(array($username));

// retrieve the first row
$row = $statement->fetch();

if ($row['count']) echo 'The user exists';
else echo 'The user does not exist';