odbc_exec():SQL 错误:[Microsoft][ODBC Microsoft Access Driver] 参数太少。预期 1.,SQLExecDirect 中的 SQL 状态 0700

Posted

技术标签:

【中文标题】odbc_exec():SQL 错误:[Microsoft][ODBC Microsoft Access Driver] 参数太少。预期 1.,SQLExecDirect 中的 SQL 状态 07001【英文标题】:odbc_exec(): SQL error: [Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 1., SQL state 07001 in SQLExecDirect 【发布时间】:2021-11-28 01:51:56 【问题描述】:

我在使用 MS Access 数据库的 php 中遇到了一些问题,当我在 PHP 中运行查询时显示错误

但是当我要回显“$query”变量并在 Microsoft Access 中运行语法时运行良好。

这是我的查询:

<?php

// setup database for your microsoft Access
// you can setup password in you microsoft Access

// this is a variable for your connection in odbc
// "zkConnection" is your ODBC Data Source Administrator
$conn = odbc_connect("zkConnection", "", "");

// create condition for testing conecction
if ($conn) 
    // echo "<br>Connection Established</br>";
 else 
    echo "Koneksi Gagal";


$from_date = date('d/m/Y', strtotime($_REQUEST['from_date'])) . ' 00:00:00';
$to_date = date('d/m/Y', strtotime($_REQUEST['to_date'])) . ' 23:59:59';

$query = "INSERT INTO CalculateData(USERID, Name, lastname, CardNo, DEPTID, DEPTNAME, SUPDEPTID, datein, timein, dateout, timeout) SELECT USERID, Name, lastname, CardNo, DEPTID, DEPTNAME, SUPDEPTID, Format(CHECKTIME, \"dd/mm/yyyy\") AS datein, FORMAT(MIN(CHECKTIME), 'h:m:s') AS timein, Format(CHECKTIME, \"dd/mm/yyyy\") AS dateout, FORMAT(MAX(CHECKTIME), 'h:m:s') AS timeout
FROM TransactionLog WHERE CHECKTIME BETWEEN #$from_date# AND #$to_date#
GROUP BY USERID, Name, lastname, CardNo, DEPTID, DEPTNAME, SUPDEPTID, CHECKTIME ";

if ($query) 
    //  echo $query;


$letsgo = odbc_exec($conn, $query);


if ($letsgo === false)

    die(print_r( odbc_error(), true));
else



header("location: index.php");


?>

这是我的表字段 CalculateData : CalculateData

这是我的表字段 TransactionLog : TransactionLog

【问题讨论】:

SQL Server MS Access - 请更正您的标签。 根据问题指南,请不要发布代码、数据、错误消息等的图像 - 将文本复制或输入到问题中。请保留将图像用于图表或演示渲染错误,无法通过文本准确描述的事情。 【参考方案1】:

首先,您的 sql 命令的计算结果必须是这样的:

CHECKTIME BETWEEN #2021/09/28 00:00:00# AND #2021/09/29 23:59:59#

因此,尝试:

$from_date = date('Y/m/d', strtotime($_REQUEST['from_date'])) . ' 00:00:00';
$to_date = date('Y/m/d', strtotime($_REQUEST['to_date'])) . ' 23:59:59';

$query = "INSERT INTO CalculateData (USERID, [Name], lastname, CardNo, DEPTID, DEPTNAME, SUPDEPTID, datein, timein, dateout, timeout) SELECT USERID, [Name], lastname, CardNo, DEPTID, DEPTNAME, SUPDEPTID, Format(CHECKTIME, '\#yyyy/mm/dd\#') AS datein, FORMAT(MIN(CHECKTIME), '\#h:m:s\#') AS timein, Format(CHECKTIME, '\#yyyy/mm/dd\#') AS dateout, FORMAT(MAX(CHECKTIME), '\#h:m:s\#') AS timeout
FROM TransactionLog WHERE CHECKTIME BETWEEN #$from_date# AND #$to_date#
GROUP BY USERID, [Name], lastname, CardNo, DEPTID, DEPTNAME, SUPDEPTID, CHECKTIME";

你也可以试试这个更简单的方法:

SELECT USERID, [Name], lastname, CardNo, DEPTID, DEPTNAME, SUPDEPTID, DateValue(CHECKTIME) AS datein, TimeValue(MIN(CHECKTIME)) AS timein, DateValue(CHECKTIME) AS dateout, TimeValue(MAX(CHECKTIME)) AS timeout

【讨论】:

当我这样做时,结果显示此“odbc_exec(): SQL 错误: [Microsoft][ODBC Microsoft Access Driver] 查询表达式中的语法错误(缺少运算符)格式(CHECKTIME, \# dd/mm/yyyy\#)'., SQL 状态 37000 in SQLExecDirect in" 是的,格式表达式是字符串。请查看编辑后的答案。 谢谢 Gustav,一切顺利!!!

以上是关于odbc_exec():SQL 错误:[Microsoft][ODBC Microsoft Access Driver] 参数太少。预期 1.,SQLExecDirect 中的 SQL 状态 0700的主要内容,如果未能解决你的问题,请参考以下文章

“调用未定义函数 odbc_exec()”错误连接到 Linux PHP 服务器上的 Access 数据库

odbc_exec 执行简单查询需要很长时间

使用 odbc_exec 成功下载 PHP 页面而不是渲染是

while循环PHP中的未定义变量错误-访问[关闭]

吴裕雄--天生自然 PHP开发学习:数据库 ODBC

使用 odbc_exec libmdb mdbtools 耗尽允许的内存大小