数据库返回false,无法弄清楚我哪里出错了?

时间:2013-05-17 12:18:15

标签: php mysql pdo

我很抱歉打扰你这样一个新手问题,谢谢你抽出时间来回答它并回答它。

function dbaddusr($username, $email, $password){
        try{
            $conn = new PDO(CONNECTDATA);
            $stmt = $conn->prepare("INSERT INTO 'users' ('username', 'email', 'password') VALUES (:username, :email, :password)");
            $pass = crypt($password);
            $result = $stmt->execute(array("username" => $username, "email" => $email, "password" => $pass));
        } catch(PDOException $e) {
            echo 'ERROR: ' . $e->getMessage();
            return false;
        }
    }

问题是,$ result总是假的。 (我通过try块中的一些简单的var_dump语句发现了这一点。 我对此非常陌生,非常感谢您对修复它的帮助。

4 个答案:

答案 0 :(得分:3)

如果需要,请不要引用列名称,使用反对`

INSERT INTO users (username, email, password) VALUES (:username, :email, :password)

答案 1 :(得分:0)

quotes更改为backticks表格&查询中的列名

 $stmt = $conn->prepare("INSERT INTO `users` (`username`, `email`, `password`) VALUES      
        (:username, :email, :password)");

答案 2 :(得分:0)

你在数组中传递$ pass,你的函数接受$ password 检查您的错误消息以获取具体细节,您将发现问题。

答案 3 :(得分:-1)

一个非膨胀的版本,清除了所有无用和错误的代码。

function dbaddusr($username, $email, $password){
    global $conn;
    $sql  = "INSERT INTO users (username, email, password) VALUES (?,?,?)";
    $stmt = $conn->prepare($sql);
    $pass = crypt($password);
    $stmt->execute(array($username, $email, $pass));
}

您必须为每个应用程序连接ONCE,然后一直使用该单个连接。