2014-02-20 90 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