2014-12-01 64 views
1

我很喜歡使用mysqli風格的php查詢,但我試圖使用更多的PDO。我想我大部分都知道如何使用它,但每次都會出現一些讓我感到不快的東西。PDO不返回來自mysql查詢的結果

所以我做一個基本的SELECT查詢到MySQL數據庫,我不能從查詢

PHP

try { 
    $dbhandle = new PDO("mysql:dbname = {$dbname}; host = {$dbhost}; port = {$dbport}", $dbuser, $dbpass); 
} catch (PDOException $e) 
{ 
    echo "Error when creating Database Handle. Error: " .$e; 
} 

$sql = $dbhandle->prepare("SELECT projectName FROM `__projects`"); 
$sql->execute(); 

$projectList = $sql->fetch(PDO::FETCH_BOTH); 

$size = sizeof($projectList); 
echo $size; 

我不明白,爲什麼返回的數組爲空得到任何結果。我犯了一個錯誤嗎?我知道用戶/通行證是好的,因爲我可以在使用mysqli方法時使用相同的查詢返回結果。

我在做什麼錯?

+0

爲什麼周圍的引號表名?你有沒有試過對phpAdmin或其他數據庫管理工具的查詢? – 2014-12-01 17:29:22

+0

@MarcoMura這些至少是表名正確的引號。 – tadman 2014-12-01 17:30:39

+0

@tadman我的查詢確實沒有它們,所以,如果這些不是特殊的......沒有必要=) – 2014-12-01 17:31:38

回答

0

當你想要執行一個查詢時,首先確定它將通過使它不等於或等於false來運行。這樣你可以調試你的腳本。嘗試單獨準備查詢,而不是立即執行。

下面的示例選擇其中的「id」爲1或3。

<?php 
// Connection data (server_address, database, name, poassword) 
$hostdb = 'localhost'; 
$namedb = 'tests'; 
$userdb = 'username'; 
$passdb = 'password'; 

try { 
// Connect and create the PDO object 
    $conn = new PDO("mysql:host=$hostdb; dbname=$namedb", $userdb, $passdb); 
    $conn->exec("SET CHARACTER SET utf8");  // Sets encoding UTF-8 

    // Define and perform the SQL SELECT query 
    $sql = "SELECT * FROM `sites` WHERE `id` IN(1, 3)"; 
    $result = $conn->query($sql); 

    // If the SQL query is succesfully performed ($result not false) 
    if($result !== false) { 
    $cols = $result->columnCount();   // Number of returned columns 

echo 'Number of returned columns: '. $cols. '<br />'; 

// Parse the result set 
foreach($result as $row) { 
    echo $row['id']. ' - '. $row['name']. ' - '. $row['category']. ' - '. $row['link']. '<br />'; 
} 
} 

$conn = null;  // Disconnect 
} 
catch(PDOException $e) { 
echo $e->getMessage(); 
} 
?>