2017-05-11 19 views
2

2つの文字列パラメータを使用してSQL文を作成しようとしています。基本的に私はPHPでMS Accessのテーブルを照会しています。php MS Access複数の文字列パラメータを持つSQLクエリ

以下の構文は正しいですか?

ここで、$ parm1という1つのパラメータ文字列を試しました。文字列の構文は次のとおりです。これは私がPHPで質問しているMS Accessのテーブルであることに注意してください。次のように

$parm1 = "'TPMS'"; 

今すぐ対応するMS AccessのSQLステートメントが働くです:今

$sql = "SELECT * FROM archive where productfamily like $parm1 order by fullname asc" 

動作しない二つのパラメータと対応するMS AccessのSQLステートメント。誰かがなぜSQL文で2番目のパラメータが機能しないのか教えていただけますか?それはおそらく私の構文ですか?

$sql = "SELECT * FROM archive where productfamily like $parm1 and " 
$sql .= "where productderivative like $parm2 order by fullname asc"; 

答えて

1

まず、あなたは、単一引用符を使用して文字列リテラルを囲む必要があります。第二に

$parm1 = "'TPMS'"; 
$parm2 = "'Clamp In'"; 

$sql = "SELECT * FROM archive where productfamily like ".$parm1 ."and where productderivative like". $parm2; 

'

LIKEステートメントは、ワイルドカード文字

  1. %%と便利です記号は0、1、または複数の文字を表します
  2. :(アクセス用)
  3. ?疑問符は、あなたがどこでも後、あなたは例えば

    を持っているでしょうTPMSを含むことが出現箇所を探している場合は、その

だから、1文字を表し

$parm1 = "'TPMS%'"; 
$parm1 = "'%TPMS'"; 
$parm1 = "'%TPMS%'"; 
$parm1 = "'?T%'"; 
$parm1 = "'T?%?%'"; 
$parm1 = "'T%o'"; 

評価結果は次のとおりです。

WHERE productfamily LIKE 'TPMS%' --Finds any values that starts with "TPMS" 
    WHERE productfamily LIKE '%TPMS' --Finds any values that ends with "TPMS" 
    WHERE productfamily LIKE '%TPMS%' --Finds any values that have "TPMS" in any position 
    WHERE productfamily LIKE '?T%' --Finds any values that have "T" in the second position 
    WHERE productfamily LIKE 'T?%?%' --Finds any values that starts with "T" and are at least 3 characters in length 
    WHERE productfamily LIKE 'T%o' --Finds any values that starts with "T" and ends with "o" 
+0

私は仕事のおかげでこの明日を試してみます –

0

こちらの文書のコードをhttps://www.sitepoint.com/using-an-access-database-with-php/に修正します。

$dbName = $_SERVER["DOCUMENT_ROOT"] . "yourpathhere\archive.mdb"; 
if (!file_exists($dbName)) { 
    die("Could not find database file."); 
} 
$pdo = new PDO("odbc:DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=$dbName; Uid=; Pwd=;"); 

$parm1 = 'TPMS'; 
$parm2 = 'Clamp In'; 
$sql = 'SELECT * FROM archive where productfamily like :family and where productderivative like :derivative'; 

$pdo->prepare($sql) 
$pdo->bindParam(':family', $parm1, PDO::PARAM_STR); 
$pdo->bindParam(':derivative', $parm2, PDO::PARAM_STR); 
$pdo->execute(); 

これはテストされていません。何かが失敗したら、私に知らせてください。私はいくつかのテーブルを作り、それを実行します。

+0

こんにちはPendoそれは私の使用していないMS Accessデータベースです –

+0

更新されたコードをご覧ください。 – pendo

関連する問題