2012-10-26 150 views
2

這是從以前的問題進行後續:When to use PDO prepared queries. mysql_real_escape errorPDO準備查詢返回任何

林總的初學者和使用上mysql_real_escape每個GET和我問我的數據庫之前,POST變量。當我上傳到我的主機時,我意識到你不應該在PDO中使用它。我正在將用戶提交的數據更改爲準備好的查詢。

我連接到我的數據庫是這樣的:

$hostname = "localhost"; 
$username = "root"; 
$password = "root"; 

try { 
    $dbh = new PDO("mysql:host=$hostname;dbname=wmpt", $username, $password); 

} 
catch(PDOException $e) 
    { 
    echo $e->getMessage(); 
    } 
下面

是一個示例查詢:

$url = $_GET['q']; 
$STH = $dbh->prepare("SELECT qid FROM tblurl WHERE url = :url"); 
$STH->bindParam(':url', $url); 
$STH->setFetchMode(PDO::FETCH_ASSOC); 
$urlid = $STH->fetch(); 
print_r($urlid); 

的print_r的輸出絕對沒問題,我就從我的測試GET變量,測試值DB。任何想法我做錯了什麼?我相信我是個白癡,非常感謝幫助。

+0

bindParam('url',$ url) – Skrol29

+0

'$ url'是一個字符串嗎? – SomeKittens

+0

@ Skrol29根據[文檔](http://php.net/manual/en/pdostatement.bindparam.php),馬特做的是正確的。 – SomeKittens

回答

1

您只需要execute您的查詢,然後您可以獲取結果。

$url = $_GET['q']; 
$STH = $dbh->prepare("SELECT qid FROM tblurl WHERE url = :url"); 
$STH->bindParam(':url', $url); 

$STH->execute(); 

$STH->setFetchMode(PDO::FETCH_ASSOC); 
$urlid = $STH->fetch(); 
print_r($urlid); 
+0

你先生,值得溫暖的握手。我知道這是我的一個小學生的錯誤。做得好! – matt

+0

@matt沒問題 - 我懷疑混淆是從你的另一個問題的答案中產生的,答案者使用'query'而不是'prepare',因此沒有調用'execute'。 – bcmcfc

+0

在這個特定情況下使用準備或查詢有什麼區別?有更好的做法嗎? – matt