2015-11-19 25 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?