2013-05-18 98 views
1

我试图通过php5-fpm 5.4.4-14查询MySQL 5.5.30服务器时失败。下面是我们正在尝试查询:PDO查询不返回结果

mysql> select * from cat where cat = 'sc'; 
+------+------+--------------------+ 
| ID | cat | name    | 
+------+------+--------------------+ 
| 1 | sc | SOLID CARBIDE BITS | 
+------+------+--------------------+ 
1 row in set (0.00 sec) 

这里类似的查询,首先尝试获取类别名称,然后数组指定的一些其他领域。 print_r($result);echo $result['name'];不返回结果。在尝试使用PDO语句查询MySQL数据库时是否有某些我忽略的内容?

<?php 

$pdo = new PDO('mysql:host=localhost;dbname=database','username','password'); 
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
$cat= $_GET["cat"]; 
/* let try grabbing one of those rows, do not think an array should be here? */ 
$stmt = $pdo->prepare('SELECT * FROM cat WHERE cat = :cat'); 
$stmt->bindParam(':cat', $cat); 
/* based on the feedback below, we must execute */ 
$stmt->execute(); 
$result = $stmt->fetch(PDO::FETCH_ASSOC); 
print_r($result); 
echo $result['name']; 
?> 

回答

1

你需要调用execute,试试这个:

$stmt->bindParam(':cat', $cat); 

$stmt->execute(); 

$result = $stmt->fetch(PDO::FETCH_ASSOC); 
+0

大,它允许'的print_r($结果);'返回阵列的'的阵列([0] =>数组([ID] => 2 [cat] => scs [name] => SOLID CARBIDE SPIRAL BITS))'',尽管我无法解析echo $ result ['name'];'的单个元素,是否有更好的方法返回这样的查询? – Astron

+0

做fetchOne()代替 –

1

MySQL的原生准备不支持命名的参数,所以你可以改变:cat?,或者设置PDO::ATTR_EMULATE_PREPAREStrue

此外,您可以添加try语句来查看异常和错误消息。

1

你不能分析像$result['name'];这样的单个元素,因为它在子数组中。

因此,您应该使用类似$result[0]['name'];的东西来访问子阵列。

如果您有多个结果,请使用foreach循环。 实施例:

foreach ($result as $subarray) { 
    foreach ($subarray as $key => $value) { 
     echo "Key: $key \n\n"; 
     echo "Value: $value \n\n"; 
    } 
} 

查看我的例子: http://phpfiddle.org/main/code/z7w-jhk