-1
    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 服务器版本相对应的手册,以在第 1 行的 ':username' 附近使用正确的语法

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

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

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

非常感谢解决此问题的任何帮助。

4

1 回答 1

2

使用准备语句

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

使用绑定参数:

$STH = $DBH->prepare("SELECT id FROM users WHERE full_name = :username");
$STH->bindParam(':username', $username, PDO::PARAM_STR);
$STH->execute();
于 2013-05-31T10:31:38.317 回答