2015-08-31 30 views
0

我習慣於使用BindParam()並且因爲這是一個SELECT query Param's不相關。基本上我試圖做一個通知系統來檢查數據庫,如果任何行的狀態是'0',那麼它會輸出所有的行信息。在PDO中輸出一個選擇查詢

我有以下列:id, api, request, apikey, apiemail, keyauth, ip, dateandtime, status

我該如何讓PDO將它從所有行中收集的所有信息與status='0'一起放入可用變量,如:$id, $api, $request?當然,可能有更多的一行與status='0'所以也許有變量陣列和輸出像$id[0], $id[1] e.t.c.

PDO:

$STH = $DBH->prepare("SELECT id, api, request, apikey, apiemail, keyauth, ip, dateandtime, status FROM apirequests WHERE status = 0 ORDER BY id"); 
$STH->execute(); 
if($STH->rowCount()){ 
while($row = $STH->fetch(PDO::FETCH_OBJ)){ 
    #Perform whatever operation you need on a single row 
    echo "$row->id, $row->api, $row->request, $row->apikey, $row->apiemail\n"; 
} 
} 

回答

1

您可以(通過現場,如果你想在一個特定的順序結果還順序)獲取它們爲對象這是沒有意義的。 $row['id']同樣可用,但方式更靈活。雖然可以使用extract()函數將數組成員分配給相應的變量。

of course there could be more then one row with status='0' so maybe have the variables arrays and output like $id[0], $id[1] e.t.c

這樣做會更沒有意義,沒有人這樣做。不管怎樣,PDO不會爲你做這樣的變數。相反,必須使用行數組,如其他答案中所示。

+0

真棒,其他答案的foreach循環的縮小版本更多。 – John123

+0

我有問題,我怎麼做多個查詢,所以我可以用同樣的方式從其他數據庫獲取信息? – John123

+0

在函數中放入第1-3行,將select替換爲將包含實際查詢的函數的參數。一旦檢查了行數,循環將返回$ STH,而while循環將是您調用函數的位置,因此您可以相應地對數據進行操作。 – ac3hole

-1
$value = 0;  
$STH = $DBH->prepare("SELECT id, api, request, apikey, apiemail, keyauth, ip, dateandtime, status FROM apirequests WHERE status = ?"); 
$STH->execute(array($value)); 
$variable[] = $STH->fetchAll(PDO::FETCH_ASSOC);  
+0

可以請你介紹一下這個答案是怎麼回事? – John123

+0

將你的變量設置爲$ STH->執行函數作爲一個數組,你也可以設置多個條件。當你動態地將條件變量放到數組中時。 –

+0

似乎根本不起作用:/ [31-Aug-2015 13:34:38 America/New_York] PHP注意:未定義的變量:stmt在第15行的/home/unfed/public_html/test.php [31-Aug -2015 13:34:38 America/New_York] PHP致命錯誤:調用第15行中的/home/unfed/public_html/test.php上的null成員函數fetchAll()調用 – John123

0

put them into usable variables like: $id, $api, $request e.t.c

有:

<?php 

include('/cdn/global/db.php'); 

$opt = array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION); 
$dsn = "mysql:host=$host;dbname=$dbname"; 

$DBH = new PDO($dsn, $username, $password, $opt); 
$DBH->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
$DBH->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 

$STH = $DBH->prepare("SELECT id, api, request, apikey, apiemail, keyauth, ip, dateandtime, status FROM apirequests WHERE status = 0"); 

$STH->execute(); 

echo "<p>The link is now in Queue, An admin will check the link soon!</p>"; 


# close the connection 
$DBH = null; 

###### 

?> 
+0

那麼$ row ['id']是最好的方法呢? – John123