PDO围绕占位符发出和不附带问题

时间:2013-05-31 10:29:06

标签: mysql pdo

    try {
    $STH = $DBH->query("SELECT id FROM users WHERE full_name = :username");
    $STH->bindParam(':username', $username); 
    $nameExists = $STH->rowCount(); 
    if ($nameExists != 0) {
        $error .= "That username already exists<br>";
    }
}

    catch(PDOException $e) {  
        $error .= $e->getMessage()  . "<br>";
    }

以上是我正在使用的代码。 $ username之前定义。此代码的问题是我收到以下错误:

  

SQLSTATE [42000]:语法错误或访问冲突:1064您有   SQL语法错误;查看与您的手册相对应的手册   MySQL服务器版本,用于在':username'附近使用正确的语法   第1行

当我将代码更改为包含'around:username so ...

$STH = $DBH->query("SELECT id FROM users WHERE full_name = ':username'");

语句执行正常,但在应该的时候不匹配记录。当我删除占位符并只写WHERE full_name ='John Doe'时一切正常。

任何帮助解决这个问题都非常感激。

1 个答案:

答案 0 :(得分:2)

使用prepare statement

$STH = $DBH->prepare("SELECT id FROM users WHERE full_name = :username");
$STH->execute(array(':username'=>$username));

使用bindParam:

$STH = $DBH->prepare("SELECT id FROM users WHERE full_name = :username");
$STH->bindParam(':username', $username, PDO::PARAM_STR);
$STH->execute();