2014-12-01 113 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(); 
} 
?>