使用MySQL数据库的预准备语句返回特定列

时间:2012-08-14 18:20:27

标签: php mysql select prepared-statement

我第一次尝试使用MySQL的预准备语句,但它没有返回任何数据:

$pdo = new PDO('mysql:dbname=[DBASE];host=localhost', '[USER]', '[PWORD]',
                array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'));

$sth = $pdo->prepare('SELECT id FROM users WHERE username = "' . mysql_real_escape_string($_SESSION['myusername']) . '"');
$sth->execute();
$result = $sth->fetch(PDO::FETCH_OBJ);
$user_id = $result->id;

可能很清楚我正在尝试返回给定用户名的user_id。有人能让我知道我做错了什么。感谢。

1 个答案:

答案 0 :(得分:1)

对于你想要做的事情:

$pdo = new PDO('mysql:dbname=[DBASE];host=localhost', '[USER]', '[PWORD]',
                array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'));

$sth = $pdo->prepare('SELECT id FROM users WHERE username = ?');

$success = $sth->execute(array($_SESSION['username']));

if ($success) {
    $result = $sth->fetch(PDO::FETCH_OBJ);
    $user_id = $result->id;
} else {
    echo "Query failed.";
    var_dump($sth->errorInfo());
}

您必须使用命名或位置参数准备语句。如果准备成功,则可以对该语句执行查询。根据绑定参数的方式,execute将接受不同类型的参数。

如果语句的执行成功,您可以从中读取结果。

手册中的更多示例: