2017-05-11 52 views
2

我想用两个字符串参数构造一条SQL语句。基本上我正在用php查询MS Access表。php MS Access多个字符串参数的SQL查询

下面是我的语法正确吗?

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

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

现在我试了一个名为$ parm1的参数字符串,字符串的语法如下。请注意,这是我用php查询的MS Access表。

$parm1 = "'TPMS'"; 

现在相应的MS Access SQL语句是如下这些作品:

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

现在用两个参数相应的MS Access SQL语句不工作。有人可以告诉我为什么第二个参数在SQL语句中不起作用吗?这可能是我的语法吗?

$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. %百分比符号代表零个,一个或多个字符
  2. ?问号(对于Access)代表单个字符

所以,如果你正在寻找OCCURENCES可能包括TPMS任何地方后,你会

例如:

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

其中评估以下SQL:

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

Hi Pendo这是一个MS Access数据库,而不是我正在使用的MYSQL –

+0

请参阅最新的代码。 – pendo