-1

我在 PHP 中使用 Jet。查询文本字段很容易,但我的主键是一个整数,我无法得到正确的字符串。我试过休耕:

SELECT * FROM Table1 WHERE 'FullName' = 'ABNER AVERY' 失败!

SELECT * FROM Table1 WHERE FullName = 'ABNER AVERY' 成功,正确显示:

(ÀoRows returned: -1
Key = INDI_ID Value = 64
Key = Given Value = ABNER
Key = Surname Value = AVERY
Key = Birth Value = 28 MAY 1712
Key = BirthPlace Value = Groton, New London, Connecticut, USA
Key = Death Value = 13 AUG 1771
Key = DeathPlace Value = Montville, New London, Connecticut, USA
Key = Mother Value = ELIZABETH BILL
Key = Father Value = JONATHAN AVERY
Key = Spouse1 Value = AMY FOX
Key = Marriage1 Value = 22 MAY 1740

SELECT * FROM Table1 WHERE INDI_ID =64 / "SELECT * FROM Table1 WHERE \"INDI_ID\"=64" 无错误,无显示

SELECT * FROM Table1 WHERE INDI_ID = 64 / SELECT * FROM Table1 WHERE INDI_ID=64 错误“(Ào”无显示

SELECT * FROM Table1 WHERE INDI_ID='64' 警告:odbc_exec(): SQL 错误:[Microsoft][ODBC Microsoft Access Driver] 条件表达式中的数据类型不匹配。,C:\xampp\htdocs\averykin 中 SQLExecDirect 中的 SQL 状态 22005 \testdb.php 第 10 行 22005

SELECT * FROM Table1 WHERE INDI_ID=\"64\" 警告:odbc_exec():SQL 错误:[Microsoft][ODBC Microsoft Access Driver] 参数太少。预期 1.,SQLExecDirect 中的 SQL 状态 07001 在 C:\xampp\htdocs\averykin\testdb.php 第 10 行 07001

列 INDI_ID 为 INTEGER 列 FullName 为 VARCHAR 列 Surname 为 VARCHAR 列 Given 为 VARCHAR 列 Sex 为 VARCHAR 列 Birth 为 VARCHAR 类型 下面是 PHP:

     <?php
$conn=odbc_connect('genealogy','','');//dsn
$id=2;
$n=(int)$id;
ini_set ( 'odbc.defaultlrl' , '65536' );
$sql="SELECT * FROM Table1 WHERE INDI_ID='64'";echo $sql."</br>";
//
//FullName = 'ABNER AVERY'
//=#27-Sep-50# finds dates equal to 27 September 1950
$result=odbc_exec($conn,$sql);echo odbc_error($conn);
if (odbc_fetch_row($result))
{
    $assoc=array();
   while($user_detail = odbc_fetch_array($result) ) {
        $assoc = array_push_assoc($assoc, 'INDI_ID', $user_detail["INDI_ID"]);
        $assoc = array_push_assoc($assoc, 'Given', $user_detail["Given"]);   
4

1 回答 1

1

从您的代码中可以看出,您正试图“转义”表名,或者将其包装起来,以便查询引擎能够识别您的字段。

在 Access/JET 中,这通常使用方括号来完成。我不熟悉您使用的 ODBC 驱动程序,所以我不知道它与纯 JET 的关系有多密切。

$sql="SELECT * FROM Table1 WHERE [INDI_ID] = 64";echo $sql."</br>";

除非您使用的字段数据类型是文本,否则不要将您的数字 64 括在任何类型的引号中。

这里有一些建议可以尝试缩小到真正的问题:

  • 尝试只检索一个字段。
  • 尝试将主键字段名称更改为更简单的名称,其中不包含任何符号。

    $sql="SELECT ID FROM Table1 WHERE ID = 64";echo $sql."";

于 2013-07-11T17:22:28.717 回答