2015-11-19 27 views
1

所以我試圖在SQL中使用「LIKE」,基本上看看球員是否已經在球隊中。下面是我的代碼:LIKE SQL參數拋出無效參數號

$checkifonlytwo = "SELECT * FROM sg_turn_teams WHERE joinid = :joinid AND players LIKE '%:ownerid,%'"; 
    $paramstwo = array(
     ":joinid" => $joinid, 
     ":ownerid" => $_SESSION['user']['id'] 
    ); 
    try{ 
    $stmttwo = $db->prepare($checkifonlytwo); 
    $resulttwo = $stmttwo->execute($paramstwo); 
    } 
    catch(PDOException $ex){ 
     die("Failed to run query #2: " . $ex->getMessage()); 
    } 

此外,你可以看到我想這是LIKE '%1,%'例如,所以在最後的逗號太多。

我的表結構看起來像這樣。 table structure

編輯,玩家將會像沒有名字的「1,2,3」,因爲用戶可以改變他們的名字。圖片與名稱,但它應該是1,2,3

+1

解決您的數據結構,這樣你就不會在一個字符串存儲整數外鍵名單。 –

+0

@GordonLinoff你的意思是?我這樣做是因爲它是用戶的ID,但可以有幾個,所以我需要它們的列表,例如「1,2,3,4」 – Odin

+0

您的表結構是什麼樣的? – Maximus2012

回答

5

前言。我決定讓這個社區維基。除了OP和其他訪問這個問題的人之外,我不想從中得到任何東西。

正如我在評論中所說的,你用錯誤的方式在那裏用逗號ownerid,

你需要做的是在陣列上使用implode並使用IN()

https://stackoverflow.com/a/12151295/

$e = 0; 

while($e<$num1){ 
$units = 0; 
$r = 0; 
$SO_Line_Item=mysql_result($result1,$e,"SO_Line_Item"); 

    foreach ($Boxes[$e] as $a => $b) 
    { 

     $zzz[] = $Boxes[$e][$r]; 

$ce = count($Boxes[$e]);   

    $r++; 
    } 
//end inner foreach 

$products = implode(',', array_fill(0,$ce, '?')); 

$db = new PDO('mysql:host=192.168.1.197 ;dbname=Tracking', $dbuser,$dbpass); 
$stmt = $db->prepare("SELECT Box_Num,Timestamp,E3_SN,Assy_Status FROM Current_Box WHERE Box_Num IN($products)"); 
$stmt->execute($zzz); 
$results = $stmt->fetchAll(PDO::FETCH_ASSOC); 
} 
unset($zzz); 
$e++; 
} 

貸款以及從https://stackoverflow.com/a/2814703/

$ids = array(2, 4, 6, 8); 

// prepare a string that contains ":id_0,..,:id_n" and include it in the SQL 
$plist = ':id_'.implode(',:id_', array_keys($ids)); 
$sql = "SELECT * FROM someTable WHERE someId IN ($plist)"; 
// prepare & execute the actual statement 
$parms = array_combine(explode(",", $plist), $ids); 
$stmt = $PDO->prepare($sql); 
$rows = $stmt->execute($parms); 

從評論:

「你可能想使用關聯表而不是存儲信息的方式你正在存儲它 - Maximus2012「

正如在評論中提到,一些問題/答案從SO演示協會表的概念與複合主鍵一起:

Mysql : Association table

How to use an MySQL association table to return categories not currently assigned to an entry

如果OP決定採用這種結構,那麼需要更改查詢以利用LEFT JOIN和/或使用IN的子查詢條款。 SO上有很多例子。一,我可以用一個簡單的搜索找到(請忽略慢查詢部分,並期待在例子來說明這個概念):

MySQL - SELECT WHERE field IN (subquery) - Extremely slow why?