gpt4 book ai didi

php - MySQL SELECT 语句 COUNT 错误

转载 作者:行者123 更新时间:2023-11-29 08:09:26 27 4
gpt4 key购买 nike

编辑 - 使用PHP我与本地 Access 数据库建立了 ODBC 连接

我收到以下错误:

警告:odbc_exec():SQL 错误:[Microsoft][ODBC Microsoft Access Driver]COUNT 字段不正确,C:\xampp\htdocs\cpanel\modelsearch\test.php 中的 SQLExecDirect 中的 SQL 状态 07001 在线37
SQL错误

我感觉 ODBC 连接的某些语法是错误的

$sql="SELECT `ITEM`, `DESCRIPTION`, `CUS_LOC_NAME`, `MECH_REL_BY`, `PM_DESIGN`, `SHIP_ACTUAL`, `HPL`, `WO_LINE`, `SO` FROM `Schedule` WHERE `HPL` <> 'PART' AND (LEFT(`DESCRIPTION`,6)=?) AND (LEFT(`CUS_LOC_NAME`,6)=?)";

该语句在 Access 中运行良好,但不能很好地转换为 MySQL。我在这里缺少什么语法?

完整代码最近编辑以删除 PDO 语句:

<?php
date_default_timezone_set('America/Chicago');

$sql="SELECT `ITEM`, `DESCRIPTION`, `CUS_LOC_NAME`, `MECH_REL_BY`, `PM_DESIGN`, `SHIP_ACTUAL`, `HPL`, `WO_LINE`, `SO` FROM `Schedule` WHERE `HPL` <> 'PART' AND (LEFT(`DESCRIPTION`,6)=?) AND (LEFT(`CUS_LOC_NAME`,6)=?)";
$rs=odbc_exec($conn,$sql);
if (!$rs) {
exit("Error in SQL");
}

echo "<table><tr>";
echo "<th>ITEM</th>";
echo "<th>DESCRIPTION</th>";
echo "<th>CUS_LOC_NAME</th>";
echo "<th>MECH_REL_BY</th>";
echo "<th>PM_DESIGN</th>";
echo "<th>SHIP_ACTUAL</th>";
echo "<th>HPL</th>";
echo "<th>WO_LINE</th>";
echo "<th>SO</th></tr>";

while (odbc_fetch_row($rs)) {
$item=odbc_result($rs,"ITEM");
$desc=odbc_result($rs,"DESCRIPTION");
$cus=odbc_result($rs,"CUS_LOC_NAME");
$mech=odbc_result($rs,"MECH_REL_BY");
$pm_design=odbc_result($rs,"PM_DESIGN");
$ship=odbc_result($rs,"SHIP_ACTUAL");
$hpl=odbc_result($rs,"HPL");
$wo=odbc_result($rs,"WO_LINE");
$so=odbc_result($rs,"SO");

echo "<tr><td>$item</td>";
echo "<td>$desc</td>";
echo "<td>$cus</td>";
echo "<td>$mech</td>";
echo "<td>$pm_design</td>";
echo "<td>$ship</td>";
echo "<td>$hpl</td>";
echo "<td>$wo</td>";
echo "<td>$so</td></tr>";
}
odbc_close($conn);
echo "</table>";


?>

错误出现在这一行:`$rs=odbc_exec($conn,$sql);

当我编辑 $sql 语句以删除 and 时,此代码工作得很好:

$sql="SELECT `ITEM`, `DESCRIPTION`, `CUS_LOC_NAME`, `MECH_REL_BY`, `PM_DESIGN`, `SHIP_ACTUAL`, `HPL`, `WO_LINE`, `SO` FROM `Schedule` WHERE `HPL` <> 'PART'";

所以明显的错误是 LEFT() 函数。有人可以建议如何解决这个问题吗?另外,我不确定 = 是什么?意思是。

最佳答案

您的问题是您的查询包含预准备语句的占位符 (?),但您将其视为普通查询。准备好的语句需要使用 odbc_prepare() 准备,然后使用 odbc_execute() 执行。

<?php
date_default_timezone_set("America/Chicago");

$conn = odbc_connect("Prod_Schedule", "", "");
if (!$conn) {
exit("Connection Failed: $conn");
}

$sql="SELECT `ITEM`, `DESCRIPTION`, `CUS_LOC_NAME`, `MECH_REL_BY`, `PM_DESIGN`, `SHIP_ACTUAL`, `HPL`, `WO_LINE`, `SO` FROM `Schedule` WHERE `HPL` <> 'PART' AND (LEFT(`DESCRIPTION`,6)=?) AND (LEFT(`CUS_LOC_NAME`,6)=?)";

$stmt = odbc_prepare($conn, $sql);
$params = array("value for first ?", "value for second ?");
$result = odbc_execute($stmt, $params);

if ($result) {
odbc_result_all($stmt);
}
?>

(谁会想到会有一个专门的函数用于将结果集打印为 HTML 表格!!?)

关于php - MySQL SELECT 语句 COUNT 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21920894/

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