php - 为什么 PDO query() 结果的键包含表名?

标签 php mysql pdo

我像这样用 PDO 连接 mysql:

        $servername = 'localhost';
        $servername = 'localhost';
        $dbname = 'atlas';
        $table = 'homepage_pv';
        $username = 'root';
        $password = 'mysql';
        $conn = null;
        try {
            $conn = new PDO(
                "mysql:host=$servername;dbname=$dbname",
                $username,
                $password,
                array(
                    PDO::ATTR_PERSISTENT => true,
                    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
                )
            );
        }
        catch(PDOException $e) {
            echo "connect to mysql failed : " . $e->getMessage();
            $conn = null;
            exit;
        }

        $result = $conn->query('SELECT * from homepage_pv')->fetchAll(PDO::FETCH_NAMED);
        echo "result=" . json_encode($result);

结果是:

result=[{"homepage_pv.id":"1","homepage_pv.datetime":"2019-08-19 22:56:26"},{"homepage_pv.id":"2","homepage_pv.datetime":"2019-08-19 22:56:28"},{"homepage_pv.id":"3","homepage_pv.datetime":"2019-08-19 23:01:58"}]

键包含表名“homepage_pv”,这不是预期的;
但是我像这样创建 PDO :

        try {
            $conn = new PDO(
                "mysql:host=$servername;",
               ...
            );
        }
        ...
        $result = $conn->query('SELECT * from atlas.homepage_pv')->fetchAll(PDO::FETCH_NAMED);
        echo "result=" . json_encode($result);

结果中的键不再包含表名,如下所示:

result=[{"id":"1","datetime":"2019-08-19 22:56:26"},{"id":"2","datetime":"2019-08-19 22:56:28"},{"id":"3","datetime":"2019-08-19 23:01:58"},{"id":"4","datetime":"2019-08-19 23:08:48"}]

在情况1中,我在创建PDO时指定了dbname,而在查询时省略了它;
在情况2中,情况恰恰相反;

那么是什么原因造成的呢?如何在创建 PDO 时指定 dbname,而结果中的键不包含表名?

最佳答案

fetchAll() 中使用 PDO::FETCH_ASSOC。如果您使用 PDO::FETCH_NAMED 它将返回别名。如果别名不存在,则使用表名。附上doc供您进一步引用。

关于php - 为什么 PDO query() 结果的键包含表名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57559645/

相关文章:

php - PDO 为带有命名占位符的 INSERT 和 ON DUPLICATE KEY UPDATE 准备语句

mysql - 学习 PDO 查询

php - 影响格式化和 JS 输出的嵌套跨度元素

php - 在php中合并两个formvars

javascript - 使用ajax/php在表单上显示消息

java - Hibernate - 实体 - 数据库保存

javascript - 是否可以直接从 Javascript 访问 MySQL 数据库

php - 带有 'now() + INTERVAL' 的 INSERT 语句在具有命名占位符的 PDO 中插入 000

php - Yii 2 基本模板中的多个用户

php - 将多个值连接成一行可以在 MySQL 控制台中使用,但不能在 PHP 中使用