gpt4 book ai didi

mysql - PDO Select 语句 SQL 进入 MySQL 不产生任何数据

转载 作者:行者123 更新时间:2023-11-29 12:28:01 25 4
gpt4 key购买 nike

我发现在 phpadmin 和命令行中运行的 SQL 查询以及其他 SQL 工具在 PDO (PHP) 下产生空白输出。

连接脚本和变量绑定(bind)正在运行。我收到 200 OK 但输出是

[{"":""}]

它应该生成这样的数据。

Apple Inc. (aapl) 
Last price: $103.0
WYT fair value (npv): $87
Upside to WYT fv: -16%
Valuation momentum (fwd 1 Yr): 3%
Volatility margin of error +/-): 35%

任何关于为 PDO 应用标准 SQL 语法的线索以及任何在这种情况下 PDO 可能出现问题的想法都将非常有帮助。

评论 2015 年 1 月 20 日@crislar

I fixed this by forking the original SQL written for another application to impose labels for all data being output as JSON. I've used letters a-f which can be seen after AS

这是修改后的 SQL

<?php
include("dbconfig.inc.php");
header("Content-type: application/json");

$code_wyt = $_POST['code_wyt'];

$sth = $dbh->prepare ("SELECT
CONCAT(sc.CoName, ' (', sc.code_wyt, ')') AS 'a',
IF (
sc.currency_shares = '£',
CONCAT(
'Last price: ',
FORMAT(
@price2 := (
SELECT
price_close
FROM
stock_prices_daily
WHERE
code_wyt = :code_wyt
ORDER BY
date DESC
LIMIT 1
),
0
),
'p'
),
CONCAT(
'Last price: ',
sc.currency_shares,
FORMAT(
@price2 := (
SELECT
price_close
FROM
stock_prices_daily
WHERE
code_wyt = :code_wyt
ORDER BY
date DESC
LIMIT 1
),
1
)
)
) AS 'b',
IF (
sc.currency_shares = '£',
CONCAT(
'WYT fair value (npv): ',
FORMAT(
@price3 := (
SELECT
npv_adj
FROM
companies_monthly
WHERE
code_wyt = :code_wyt
AND date_monthly >= CURDATE()
AND MONTH (date_monthly) = MONTH (CURDATE())
ORDER BY
date_monthly
LIMIT 1
),
0
),
'p'
),
CONCAT(
'WYT fair value (npv): ',
sc.currency_shares,
FORMAT(
@price3 := (
SELECT
npv_adj
FROM
companies_monthly
WHERE
code_wyt = :code_wyt
AND date_monthly >= CURDATE()
AND MONTH (date_monthly) = MONTH (CURDATE())
ORDER BY
date_monthly
LIMIT 1
),
0
)
)
) AS 'c',
CONCAT(
'Upside to WYT fv: ',
ROUND(((@price3 /@price2) - 1) * 100, 0),
'%'
) AS 'd',
(
SELECT
CONCAT(
'Valuation momentum (fwd 1 Yr): ',
ROUND((a.npv_adj / b.npv_adj - 1) * 100, 0),
'%'
)
FROM
companies_monthly a,
companies_monthly b
WHERE
a.code_wyt = b.code_wyt
AND a.code_wyt = :code_wyt
AND b.date_monthly >= CURDATE()
AND a.date_monthly >= DATE_ADD(CURDATE(), INTERVAL 1 YEAR)
ORDER BY
a.date_monthly,
b.date_monthly
LIMIT 1
) AS 'e',
(
SELECT
CONCAT(
'Volatility margin of error +/-): ',
FORMAT(
margin_of_error_valuation * 100,
0
),
'%'
)
FROM
MoE_valuation
WHERE
code_wyt = :code_wyt
AND sample_period_yrs = '10'
LIMIT 1
) AS 'f',
'null',
'null',
'null',
'null'
FROM
stock_codes sc,
stock_prices_daily spd
WHERE
sc.code_wyt = spd.code_wyt
AND sc.code_wyt = :code_wyt
ORDER BY
spd.date
LIMIT 1");
$sth->bindParam(':code_wyt', $code_wyt, PDO::PARAM_STR, 12);
$sth->execute();
$result=$sth->fetchALL(PDO::§);
$dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
echo json_encode($result);
?>

干杯!

C

最佳答案

我按照上面在原始帖子的修订代码中所述修复了此问题。问题是编写原始 SQL 查询是为了从 MySQL 中保存的数据在 Excel 中输出空行。

如果数据没有标签,PDO 中的 JSON 编码似乎会忽略数据。

我的修复方法是在本例中使用字母 a-f 添加标签,以便 JSON 解析器获取数据并将其输出为 JSON。

原始 SQL 在末尾输出另外三个空行,我不需要这些空行,因此我使用 NULL 来标记它们。我很可能会更改此设置以删除它们,因为最终生产版本中不需要它们。

感谢艾哈迈德,他回复了一些有趣的想法和代码片段,我一定会记住这些。查看其他人的代码非常困难,因此对那些尝试过的人表示极大的敬意。

C

关于mysql - PDO Select 语句 SQL 进入 MySQL 不产生任何数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28010193/

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