gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 09:36:12 24 4
gpt4 key购买 nike

我像这样用 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com