2010-08-29 98 views
1

使用最新的php爲了創建一個函數,添加一行到表用戶。爲什麼bindValue或BindParam不會修改準備好的語句?

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)我得到相同的結果。 實際執行的查詢仍然有?,?而不是實際變量。

回答

0

此:

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

應該是:

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

我需要去掉雙引號,我已經習慣<<<SQL啓動串並SQL;停止它。

+0

實際上,當查詢被修復且沒有多餘的雙引號時,綁定函數不起作用。 – ufk 2010-09-02 13:43:16

+0

韋爾普,但我想這是一個不同的問題。 – ufk 2010-09-02 14:08:19

相關問題