2009-06-28 112 views
1

我有下面的代碼返回結果:PHP PDO準備查詢將不會從循環

$link = new PDO("mysql:dbname=$databasename;host=127.0.0.1",$username,$password); 
$query = $link->prepare("SELECT * FROM index WHERE sbeid=:idvar"); 
for($j = 1; $j < count($array); $j++) 
{ 
    if($array[$j][16] == "TRUE" || $array[$j][16] == "FALSE") 
    { 
     $paramforquery = $array[$j][25]; 
     $query->bindParam(":idvar",$paramforquery); 
     $query->execute(); 
     $result = $query->fetchAll(); 
     //do things with the $result 
     $query->closeCursor(); 
    } 
    //else if, do stuff 
} 
$link = null; 

$array是從通過fopen()成功加載一個CSV文件輸入組成的大陣。

我的問題是這樣的:查詢不起作用。我知道一個事實(直接在服務器上運行帶有文件樣本值的查詢)數據在數據庫中,但是當我每次運行for循環時,我都會得到一個空數組。

我在做什麼錯?

TIA。

回答

1

增加錯誤報告 - 標準諮詢。
將pdo對象的錯誤模式設置爲ERRMODE_EXCEPTION - 您很難錯過這樣的錯誤。
使用調試器或將一些調試輸出添加到腳本中 - 真正的調試器會更好。

<?php 
error_reporting(E_ALL); 
ini_set('display_errors', 1); 
$array = foo(); 
echo '<pre>Debug: |array|=', count($array), '</pre>'; 

$link = new PDO("mysql:dbname=$databasename;host=127.0.0.1",$username,$password); 
$link->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
$query = $link->prepare("SELECT * FROM index WHERE sbeid=:idvar"); 
$query->bindParam(":idvar", $paramforquery); 

foreach($array as $row) { 
    echo '<pre>Debug: row[16]='; var_dump($row[16]); echo '</pre>'; 
    if($row[16] == "TRUE" || $row[16] == "FALSE") { 
     $paramforquery = $row[25]; 
     echo '<pre>Debug: paramforquery='; var_dump($paramforquery); echo '</pre>'; 
     $query->execute(); 
     echo '<pre>Debug: rowcount='; var_dump($query->rowCount()); echo '</pre>'; 
     $result = $query->fetchAll(); 
     //do things with the $result 
     $query->closeCursor(); 
    } 
    //else if, do stuff 
} 
$link = null; 
1

你確定你正在連接嗎?

try { 
    $link = new PDO("mysql:dbname=$databasename;host=127.0.0.1",$username,$password); 
} catch (PDOException $e) { 
    print "Error!: " . $e->getMessage() . "<br/>"; 
} 

這將捕獲嘗試連接的任何異常。如果這可以正常工作,請嘗試將查詢放在$ link行下,查看返回的內容。

如果您的查詢是手動運行的,我會說它與您的數據庫連接有關。確保你打開了錯誤報告。

附加: 在您的查詢中,您有這樣的:idvar?你不應該使用像這樣的$ idvar的PHP變量。

所以

$query = $link->prepare("SELECT * FROM index WHERE sbeid=" . $idvar); 
+0

:idvar是準備好的語句中的佔位符,請參閱http://php.net/pdo.prepare – VolkerK 2009-06-28 20:28:03

+0

啊,這很有道理,謝謝。 – 32423hjh32423 2009-06-29 06:48:49