尝试通过php5-fpm 5.4.4-14查询MySQL 5.5.30服务器时失败。以下是我们要查询的内容:
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'];
?>
答案 0 :(得分:1)
您需要致电execute
,试试这个:
$stmt->bindParam(':cat', $cat);
$stmt->execute();
$result = $stmt->fetch(PDO::FETCH_ASSOC);
答案 1 :(得分:1)
MySQL native prepare不支持命名参数,因此您可以将:cat
更改为?
,或将PDO::ATTR_EMULATE_PREPARES
设置为true
。
此外,您可以添加try
语句以查看异常和错误消息。
答案 2 :(得分: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";
}
}