2014-02-20 76 views
0

编辑 - 使用PHP我做了一个ODBC连接到本地Access数据库MySQL的SELECT语句计数错误

,我发现了以下错误:

Warning: odbc_exec(): SQL error: [Microsoft][ODBC Microsoft Access Driver]COUNT field incorrect , SQL state 07001 in SQLExecDirect in C:\xampp\htdocs\cpanel\modelsearch\test.php on line 37 Error in 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 STATEMENT

<?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($康恩,$ SQL);

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

所以明显的错误是LEFT()函数:

此代码时,我编辑$ sql语句删除ANDS工作得很好。有人可以建议如何解决这个问题吗?另外,我不确定=什么?手段。

+0

查询看起来好像没什么问题。你确定参数被正确绑定吗?发布您的代码。 – miken32

+0

Y miken32和我有同样的想法。它看起来很好。 sqlfiddle也许?所以我们可以玩一点:) –

+0

我刚刚发布了整个代码。另外,在我原来的文章中,我没有提到使用PHP和建立ODBC连接的即时通讯。我道歉。 – bagofmilk

回答

2

您的问题是,您的查询包含占位符(?)的准备好的语句,但您将其视为普通查询。准备好的报表需要用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表因此专门的功能!?)

+0

谢谢miken。对困惑感到抱歉 – bagofmilk