2012-08-17 39 views
0

我在查看數據庫中的表是否已經有一行。如果有一行,那麼PHP將重定向到一個不同的頁面。如果沒有一排,它會留在那裏。這裏是我有的代碼:用PDO抓取行

$sched_ex = $db->prepare("SELECT COUNT(1) FROM sched WHERE uid = '$uid'"); 
$sched_ex->execute(); 

if($sched_ex == 0) { ... } else { redirect } 

我是新來的PDO,不知道我需要做什麼才能正常工作。

編輯:

$sched_ex = $db->prepare("SELECT COUNT(1) FROM sched WHERE uid = :uid"); 
$sched_ex->execute(array(':uid' => $uid)); 

if($sched_ex->fetchColumn() == 0) { a lot of html } 
else { 
?> 
<script langauge="javascript"> 
    window.location="../" 
</script> 
<?php 
} 

頭不工作,所以我使用的JavaScript。不過,我懷疑這是個問題。

+0

:'''標題( 「位置:」);''' – Luceos 2012-08-17 13:05:27

+0

一個人叫'退出'在調用'header'之後,它才能正常工作。您是否嘗試查看源代碼並查看它是通過一個分支還是另一個分支?你確定設置了'$ uid'嗎?你確定數據庫中的數據是否有你假設的記錄數? – troelskn 2012-08-17 13:10:02

+0

我修復了標題問題。我總是忘記退出必須被稱爲後。 $ uid是從用戶會話中設置的。 表中目前只有一行。我試圖讓這段代碼去做的是認識到那裏有那一行,因爲如果它是那麼他們不能在那個頁面上,當試圖去那裏得到重定向。 – 2012-08-17 13:14:08

回答

4

首先,使用綁定參數,以保護你的自我抵抗注入攻擊:

$sched_ex = $db->prepare("SELECT COUNT(1) FROM sched WHERE uid = :uid"); 
$sched_ex->execute(array(':uid' => $uid)); 

其次,至於你的問題:

if($sched_ex->fetchColumn() == 0) { ... } else { redirect } 

(參見:http://www.php.net/manual/en/pdostatement.fetchcolumn.php

+0

這不適合我。你能想到我可能做錯了什麼嗎? – 2012-08-17 12:25:10

+0

可能是您重定向的方式。你能否顯示if-block的完整代碼。 – troelskn 2012-08-17 12:48:12

+0

包含在編輯中。 – 2012-08-17 12:55:11

2

您可以使用rowcount函數查找有多少行(如果查詢返回任何內容),那麼您將需要實際獲取他的數據。

但是,關於這一點,從文檔:

對於大多數數據庫,PDOStatement對象:: rowCount時()不返回受SELECT語句的行數。相反,使用PDO :: query()發出一個SELECT COUNT(*)語句,其謂詞與您預期的SELECT語句相同,然後使用PDOStatement :: fetchColumn()來檢索將返回的行數。然後您的應用程序可以執行正確的操作。

您需要fetch在執行後的行:在PHP你可以重定向

$dbh = new PDO($this->mySQLAccessData->hostname, $this->mySQLAccessData->username, $this->mySQLAccessData->password); 
$stmt = $dbh->query($sql); 
$stmt->setFetchMode(PDO::FETCH_INTO, new kpiData); 
$dataCount=0; 
foreach($stmt as $kpiData) 
{ 
    $arrKPIData[$dataCount]['year']=$kpiData->year; 
    $arrKPIData[$dataCount]['month']=$kpiData->month; 
    $dataCount++; 
    unset($stmt); 
}