gpt4 book ai didi

PHP PDO fetchAll() 在选择临时表时返回空数组

转载 作者:行者123 更新时间:2023-11-29 18:20:50 25 4
gpt4 key购买 nike

我有以下查询,它包含一个临时表。如果我使用临时表,它会返回EMPTY ARRAY。如果我删除了临时表,它会返回适当的记录。

以下SQL查询包含一个简单的查询,我刚刚创建了一个临时表并插入了一些记录,我正在执行SELECT查询在该临时表中。我在 phpMyAdmin 中执行相同的代码,它返回适当的记录,但在 PDO 中返回 EMPTY ARRAY.

示例和简单的 SQL 查询:

情况#1:使用临时表 - 返回空数组

<?php

$query = <<<SQL

CREATE TEMPORARY TABLE TempContact (
ContactId int,
FirstName varchar(30),
LastName varchar(30),
IsActiveContact Boolean
);

INSERT INTO TempContact (ContactId, FirstName, LastName, IsActiveContact)
SELECT CT.ContactId, CT.FirstName, CT.LastName,
CASE WHEN SL.SalesId IS NOT NULL THEN TRUE ELSE FALSE END AS IsActiveContact
FROM Contact CT
LEFT JOIN Sales SL ON CT.ContactId = SL.ContactId;

SELECT TC.* FROM TempContact TC;

SQL;

$stmt = $db->prepare($query);
$result = $stmt->execute() ? $stmt->fetchAll() : null;

?>

情况#2:没有临时表 - 返回适当的记录

<?php

$query = <<<SQL

SELECT CT.ContactId, CT.FirstName, CT.LastName,
CASE WHEN SL.SalesId IS NOT NULL THEN TRUE ELSE FALSE END AS IsActiveContact
FROM Contact CT
LEFT JOIN Sales SL ON CT.ContactId = SL.ContactId;

SQL;

$stmt = $db->prepare($query);
$result = $stmt->execute() ? $stmt->fetchAll() : null;

?>

我的实际代码非常复杂,为了易于理解,我添加了这个简单的查询。

我还使用 print_r($stmt->errorInfo()); 检查了查询(案例 #1 查询)中是否有任何错误,但它返回一个 EMPTY ARRAY(即我的查询没有错误);。此外,它不会抛出任何 PDOException

请帮助我,如何从临时表SELECT中获取记录

最佳答案

使用 PDO,您应该一次执行一个查询。它不像 SQL 控制台,您可以一次推送一堆语句。

您需要检查每个查询是否已成功完成,然后再继续下一个查询。如果您将其分成几个 prepare/execute 对,它将按原样工作。第二个成功的原因是它由单个语句组成。

关于PHP PDO fetchAll() 在选择临时表时返回空数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46597502/

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