2013-10-11 90 views
0

我有一個6位數字引腳的列表。我想隨機地從列表中拉出一個pin並將其存儲在變量$ user_pin中,然後從列表中刪除該PIN。如何在PDO中存儲變量

我有以下開始(PDO),但不知道如何存儲變量:

選擇引腳:

$sth = $this->db->prepare("SELECT available_pins FROM pin_list ORDER BY RAND() LIMIT 0,1 ;"); 

刪除針:

$sth = $this->db->prepare("DELETE FROM pin_list WHERE available_pins = ?""); 

任何想法?

+0

你真的不應該在MySQL中使用'ORDER BY RAND()'。從表中選擇隨機行是一種非常糟糕的方式。有關更多詳細信息,請參閱[this](http://stackoverflow.com/a/9792115/727208)和[this](http://stackoverflow.com/a/9946238/727208)回答。 –

回答

1

你忘了執行查詢,你只准備它:

try { 
    // Used this method since you don't have to prepare any variable 
    $sth = $this->db->query("SELECT available_pins FROM pin_list ORDER BY RAND() LIMIT 0,1 ;"); 
    $pinarray = $sth->fetch(); 

    // Used this method since you can prepare the variable. In this situation it'd be pretty safe even chaining them though 
    $sth = $this->db->prepare("DELETE FROM pin_list WHERE available_pins = ? LIMIT 0,1"); 
    $sth->execute(array($pinarray['available_pins'])); 
    } 
catch(PDOException $e) { 
    echo "There was an error: " . $e->getMessage(); 
    } 

也有在delete命令一個錯字。 DELETE查詢中的LIMIT絕不是一個壞主意。

+2

「特定於MySQL的LIMIT row_count選項」我寧願不教人們使用MySQL特定的選項...... IMO最好使用ANSI SQL。 – chx

+0

我剛剛學到了一些新東西。謝謝@chx –

+0

@FranciscoPresencia謝謝,$ pinarray仍然出現未定義的錯誤。當我在phpmyadmin中運行它時,SQL查詢正常工作。難道我做錯了什麼?我應該使用$ this-> pinarray嗎? – alias51

0

選擇

$sth = $this->db->prepare("SELECT available_pins FROM pin_list ORDER BY RAND() LIMIT 0,1 ;"); 
$result = $sth->execute(); 

檢索

$user_pin = $result->fetchColumn(); 

刪除

$sth = $this->db->prepare("DELETE FROM pin_list WHERE available_pins = ?"); 
$sth->execute(array($user_pin)); 

這是進程列表的程序s在一個非常基本的級別,當然你會想在每一步之間做一些錯誤檢查來驗證每個查詢是否成功並且你收到了正確的數據。

+0

@aothanks,爲什麼我的$ user_pin被聲明爲underfined當我嘗試回顯它然後? – alias51

+0

可能是因爲你的選擇查詢不成功,驗證它的工作原理,並且你實際上正在接收數據......這是一個非常有用的鏈接PDO,我仍然經常參考:http://wiki.hashphp.org/PDO_Tutorial_for_MySQL_Developers –

+0

嘗試更新的代碼 –