1

尝试通过 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'];
?>
4

3 回答 3

1

你需要打电话execute,试试这个:

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

$stmt->execute();

$result = $stmt->fetch(PDO::FETCH_ASSOC);
于 2013-05-18T00:58:15.417 回答
1

MySQL 本机准备不支持命名参数,因此您可以更改:cat?,或设置PDO::ATTR_EMULATE_PREPAREStrue.

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

于 2013-05-18T01:49:17.160 回答
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

于 2013-05-18T01:54:56.070 回答