-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.、C:\xampp\htdocs\averykin\testdb.php の SQLExecDirect の SQL 状態 07001 10 行目 07001

列 INDI_ID は INTEGER 型です 列 FullName は VARCHAR 型です 列名は VARCHAR 型です 列 ギブンは VARCHAR 型です 列 性別は 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 を引用符で囲まないでください。

実際の問題に絞り込むための推奨事項を次に示します。

  • 1 つのフィールドだけを取得してみてください。
  • 主キー フィールド名を、記号を含まないさらに単純なものに変更してみてください。

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

于 2013-07-11T17:22:28.717 に答える