php - odbc_fetch_array(): SQL 错误是说字段引用了多个表但不应该。微软访问 ODBC PHP
问题描述
我有以下sql语句
$sql=
"SELECT wr.SortOrder, wr.webRequests_ID, wr.PQ_ID, pq.QText,wr.The_Answer, wr.webtmporders_detail_ID
FROM tbl_Preference_Questions as pq
INNER JOIN tblwebtmporders_detail_Requests as wr ON pq.PQ_ID = wr.PQ_ID
WHERE wr.webtmporders_detail_ID = 42569
ORDER BY wr.SortOrder";
我通过函数获取记录。变量 $mdbFilename 是 Access 数据库的路径。
$conn=odbc_connect("Driver={Microsoft Access Driver (*.mdb)};Dbq=$mdbFilename",'','',SQL_CUR_USE_ODBC);
$result_id = odbc_exec($conn, $sql);
$results = all_odbc_rows($result_id);
function all_odbc_rows($result_id)
{
$tmp_arr = "";
while($row = odbc_fetch_array($result_id)){
// this needs to be in my program code because ODBC / Access DB query will not accept escaping of single quotes. single quotes
// must be replaced by two single quotes for the sql passed to access via ODBC to work.
foreach ($row as $k => $value)
{
$v = strip_tags($value);
$row[$k] = str_replace("\\","",str_replace("'","''",$v));
}
$tmp_arr[] = $row;
}
return $tmp_arr;
}
但我收到以下 PHP 警告
odbc_fetch_array(): SQL error: [Microsoft][ODBC Microsoft Access Driver] The specified field '`PQ_ID`'
could refer to more than one table listed in the FROM clause of your SQL statement., SQL state S1000
in SQLGetData
如果我在 Microsoft Access 查询生成器中运行此 sql,它会返回 7 条记录,没有问题。然而,当我在 PHP 中通过 ODBC 运行 sql 语句时出现错误。我收到警告,并且 ODBC 不返回任何记录。无法弄清楚为什么此连接不起作用?
我试图摆脱 wr。和 pq。表标识符并将它们替换为 sequel 语句中的完整表名,但这不起作用。
有人有想法么?
谢谢你。
顺便说一句,如果我从 sql 语句中取出 wr.PQ_ID 字段,ODBC 可以成功运行查询。
这很奇怪。
这是我尝试在 ODBC PHP 中运行的此查询的 Access 中的查询生成器
所以它适用于 MS Access,但不适用于 PHP 的 ODBC 调用
诡异的。
解决方案
推荐阅读
- sql - 统计客户端 SQL 的数量
- visual-studio - 如何在 SSAS 表格模型中调试 DAX 公式?
- r - 为 plotreg 变量标签添加上标和下标
- postgresql - 在 PostgreSQL 中对列具有特定值的表添加非空约束
- javascript - 缩放时未触发 onZoom
- flutter - 如何在颤动中实现具有滚动功能的水平日期列表?
- google-drive-api - Google Drive API 通知 - 文件监视未发送添加通知 - 可能的原因?
- postgresql - 所有成员都从赞助人集群中消失了
- python - 如何使用 p.locateCenterOnScreen 一次查找 2 个图像?
- python - Tkinter 从方法中删除网格标签