为什么bindValue或BindParam不修改预准备语句?

时间:2010-08-29 11:37:26

标签: php pdo prepared-statement bindvalue bindparam

使用最新的php创建一个向表用户添加行的函数。

class targil_db {

    private $_pdo;

    public function __construct() {
        // username: root password: <blank> database: targil
        $this->_pdo = new PDO(
                    'mysql:host=127.0.0.1;dbname=targil',
                    'root',
                    ''
                    );
    }

function addUser($username, $password) {

    $md5password = md5($password);
    $sql = <<<SQL
        "INSERT INTO user (username,password) VALUES (:username,:password)"
SQL;

    $stmt = $this->_pdo->prepare($sql);
    $stmt->bindValue(':username', $username,PDO::PARAM_STR);
    $stmt->bindValue(':password', $password,PDO::PARAM_STR);
    $stmt->execute();
}

}

当我执行addUser函数时,这是我在mysql日志文件中执行的查询:

INSERT INTO user (username,password) VALUES (:username,:password)

正如您所看到的,它没有将:varname替换为正确的值。 我错过了什么?

我尝试了bindValue和bindParam但是得到了相同的结果。

更新

即使我将:username:password更改为?,?,我也会使用 bindValue(1,$username)bindValue(2,$password)我得到的结果相同。 实际执行的查询中仍然包含?,?而不是实际变量。

1 个答案:

答案 0 :(得分:1)

此:

 $sql = <<<SQL
    "INSERT INTO user (username,password) VALUES (:username,:password)"
SQL;

应该是:

$sql = <<<SQL
    INSERT INTO user (username,password) VALUES (:username,:password)
SQL;

我需要删除双引号,我已经使用<<<SQL来启动字符串,SQL;来停止它。