[英]PHP MYSQL Using IN() with CASE and Like in PDO
我一直在嘗試在我的PDO sql中實現IN語句。 我已經成功使用在IN中使用PDO的解決方案實現了一個簡單的方法
我的代碼如下:
$in_array = array("INTERNAL SITE","SUPPLIER");
$in = str_repeat('?,', count($in_array) - 1) . '?';
$dbname = $_SESSION['dbname'];
$conn = new PDO("mysql:host=localhost;dbname=$dbname", $db->id, $db->pass);
//connect to db
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
//error modes
$sql = "SELECT cs_id, name, alias, fk_cs_type as type, is_active as active
FROM companysite WHERE ( fk_cs_type IN ($in))";
$stmt = $conn->prepare($sql);
$stmt->execute($in_array);
但是,我的最終目標是也實現引用另外2個變量($ srchBy和$ srchField)的CASE和Like子句。 當我嘗試執行此操作時,出現HY093錯誤。 我在這段代碼中做錯了什么?
$in_array = array("INTERNAL SITE","SUPPLIER");
$in = str_repeat('?,', count($in_array) - 1) . '?';
$srchBy = "ALIAS";
$dbname = $_SESSION['dbname'];
$conn = new PDO("mysql:host=localhost;dbname=$dbname", $db->id, $db->pass);
//connect to db
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
//error modes
$sql ="SELECT cs_id, name, alias, fk_cs_type as type,
is_active as active FROM companysite
WHERE ( fk_cs_type IN ($in)) AND
((CASE WHEN $srchBy = 'ALIAS' THEN alias ELSE name END)
LIKE $srchField)";
$stmt = $conn->prepare($sql);
$stmt->execute($in_array);
當前,您的最終SQL將如下所示:
SELECT
cs_id,
name,
alias,
fk_cs_type as type,
is_active as active
FROM
companysite
WHERE
( fk_cs_type IN ('INTERNAL SITE','SUPPLIER')) AND
((CASE WHEN 'ALIAS' = 'ALIAS' THEN alias ELSE name END) LIKE 'value_of_$srchField_variable')
除非計划將語句轉換為MySQL視圖,否則為什么不考慮使用php條件語句構建更簡潔,更簡單的SQL語句。
$sql = "SELECT cs_id, name, alias, fk_cs_type as type, is_active as active
FROM companysite
WHERE ( fk_cs_type IN ($in) )";
if($srchBy == 'ALIAS')
{
$sql.= " AND alias LIKE $srcField";
}
else
{
$sql.= " AND name LIKE $srcField";
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.