Несоответствие типов данных PHP ODBC (MS Access) - PullRequest
0 голосов
/ 17 мая 2018

Я получаю это сообщение об ошибке при попытке выполнить запрос из MS Access DB с использованием PHP ODBC .Я знаю, что это дублирующий вопрос, но ни у одного из них нет решения.

Я пробовал запрос, используя SQL Fiddle , и он работает, но почему-то в PHP ODBC сейчас не работает.Я также хочу знать, нормально ли для "15.00" отображается как "15" вместо "15.00"?

Вот ссылка -> http://sqlfiddle.com/#!9/087d72/17

Сообщение об ошибке:

Предупреждение: odbc_exec (): ошибка SQL: [Microsoft] [ODBC Microsoft Access Driver] Несоответствие типов данных в выражении критериев. Состояние SQL 22005 в SQLExecDirect

Моя таблицав БД MS Access (имя таблицы "tblPAyTrans")

Employee ID | 1stHalf | 2ndHalf | Month | Year | EPFee |
   1011     |    1    |    0    |   2   | 2017 | 15.00 |
   1011     |    0    |    1    |   2   | 2017 | 29.00 |
   1011     |    0    |    1    |   3   | 2018 | 29.00 |

Вывод, который я хочу:

Employee ID|1stHalf|2ndHalf|Month|Year|EPFee(1sthalf)|EPFee(2ndHalf)|
   1011    |   1   |   1   |  2  |2017|     15.00    |    29.00     |
   1011    |   0   |   1   |  3  |2018|     29.00    |     0.00     |

Вот мой код:

<?php
  $conn=odbc_connect('payrolldb','','COMPLETEPAYROLL');

  if (!$conn)
  {
    exit("Connection Failed: " . $conn);
  }

  $id = 1001;
  $first_half = 1;
  $second_half = 1;

  $sql = "SELECT `Employee ID`,
         (SELECT `1stHalf` FROM `tblPAyTrans` WHERE `Employee ID` = '$id' AND `1stHalf` = '$first_half') AS `FirstHalf`,
         (SELECT `2ndHalf` FROM `tblPAyTrans` WHERE `Employee ID` = '$id'AND `2ndHalf` = '$second_half') AS `SecondHalf`,             
         (SELECT `EPFee` FROM `tblPAyTrans` WHERE `Employee ID` = '$id' AND `1stHalf` = '$first_half') AS `EPF1stHalf`, 
         (SELECT `EPFee` FROM `tblPAyTrans` WHERE `Employee ID` = '$id' AND `2ndHalf` = '$second_half') AS `EPF2ndHalf`,
         `Month`, `Year`
         FROM `tblPAyTrans`
         GROUP BY `Employee ID`,`Month`,`Year`";

  $rs=odbc_exec($conn,$sql);

  if (!$rs)
  {
    exit("Error in SQL");
  }

  echo "<br>RESULT: <br><br>";
  echo "<table border='2'>
          <tr>
            <th>Employee ID</th>
            <th>1st Half</th>
            <th>2nd Half</th>        
            <th>Month</th>
            <th>Year</th>
            <th>EPF1stHalf</th>
            <th>EPF2ndHalf</th>
          </tr>";

  while (odbc_fetch_row($rs))
  {
    $EmployeeID = odbc_result($rs,'Employee ID');
    $FirstHalf = odbc_result($rs,'FirstHalf');
    $SecondHalf = odbc_result($rs,'SecondHalf');     
    $Month = odbc_result($rs,'Month');
    $Year = odbc_result($rs,'Year');
    $EPF1stHalf = $row['EPF1stHalf'];
    $EPF2ndHalf = $row['EPF2ndHalf'];

    echo "<tr>";
      echo "<td>" . $EmployeeID. "</td>";
      echo "<td>" . $FirstHalf. "</td>";
      echo "<td>" . $SecondHalf. "</td>";            
      echo "<td>" . $Month. "</td>";
      echo "<td>" . $Year. "</td>";
      echo "<td>" . $EPF1stHalf. "</td>";
      echo "<td>" . $EPF2ndHalf. "</td>";
    echo "</tr>"; 
  }
  odbc_close($conn);
  echo "</table>";
?>

Пожалуйста, исправьтеменя, если я делаю неправильно.Я действительно ценю это.

По словам Густава: изменение синтаксиса также приводит к той же ошибке.

SELECT [Employee ID],
     (SELECT [1stHalf] FROM tblPAyTrans WHERE [Employee ID] = '$id' AND [1stHalf] = '$first_half') AS FirstHalf,
     (SELECT [2ndHalf] FROM tblPAyTrans WHERE [Employee ID] = '$id'AND [2ndHalf] = '$second_half') AS SecondHalf,             
     (SELECT [EPFee] FROM tblPAyTrans WHERE [Employee ID] = '$id' AND [1stHalf] = '$first_half') AS EPF1stHalf, 
     (SELECT [EPFee] FROM tblPAyTrans WHERE [Employee ID] = '$id' AND [2ndHalf] = '$second_half') AS EPF2ndHalf,
     [Month], [Year]
     FROM tblPAyTrans
     GROUP BY [Employee ID],[Month],[Year]

1 Ответ

0 голосов
/ 17 мая 2018

Если это Access SQL, измените его на:

$sql = "SELECT [Employee ID],
       (SELECT [1stHalf] FROM tblPAyTrans … etc.

Редактировать: И вам также может потребоваться объединение:

… WHERE [Employee ID] = {$id} AND [2ndHalf] = {$second_half}) AS [SecondHalf], …

или:

… WHERE [Employee ID] = " . $id . " AND [2ndHalf] = " . $second_half . ") AS [SecondHalf], …

Если значением является текст, кавычки необходимы:

… WHERE [Employee ID] = '{$id}' AND …
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...