PHP:WHERE子句中的strval

PHP:WHERE子句中的strval,php,Php,目前,我有一段代码可以正常工作。但我真正想做的是将部分作为

目前,我有一段代码可以正常工作。但我真正想做的是将
部分作为
子句放入
中的“从项目中选择*”
部分。我不确定这是否可能或如何进行。任何想法都会受到重视。希望这是有意义的

<?php 

//  ** User ID
$userid = $row_listelements ['id'];

// ** Projects
mysql_select_db($database_db, $db);
$query_activeusers = "SELECT * FROM projects ";
$activeusers = mysql_query($query_activeusers, $db) or die(mysql_error());
$row_activeusers = mysql_fetch_assoc($activeusers);
$totalRows_activeusers = mysql_num_rows($activeusers);

?>

<? do {?>

<?php if (!(strpos($row_activeusers['assignedto'], strval(",".$userid.",")) === false)) { ?>
<div><?=$row_activeusers['jobnumberdisplay'];?></div>
<?php } ?>

<? } while ($row_activeusers = mysql_fetch_assoc($activeusers)); ?>    

<strong><?php echo $totalRows_activeusers; ?></strong>



我不确定,但这可能会对您有所帮助

if(strval ...)
{
   $where = "where field = $value";
}

现在,您可以在select查询中使用此
$where
变量。只有当满足条件时,它才会执行。

如果我正确理解了您的代码,您应该像使用SQL
一样使用SQL
,例如:

$query_activeusers = "SELECT * FROM projects WHERE assignedto LIKE '%," . 
   ((int) $userid) . ",%'";

这里转换为(int)是为了确保
$userid
中没有特殊的SQL字符,这是一种廉价的SQL引用,用于整数值。您实际上不需要使用
strval
,因为串接到字符串中会将该数字转换为字符串

如果您的用户ID是唯一的数字,并且我正确理解您的问题,您可以通过以下方式达到此目的:

使用-可以处理字符串和数字(它们必须是唯一的才能工作):

或者使用-可以处理字符串和数字,区分大小写:

$query_activeusers = "SELECT * FROM projects WHERE FIND_IN_SET('".$userid."', assignedto)"

但我认为你应该看看你的数据库设计。在像这样的分隔列表中包含外键的问题在于,外键的整个要点是使您能够使用索引在另一个表中快速定位信息。通过实现一个听起来像你拥有的数据库,你有各种各样的问题需要解决

“assignedto”的字段值是逗号分隔的用户ID字符串,您想检查当前用户ID是否是其中的一部分吗?此外,这实际上不是答案的一部分,但您必须使用LIKE there这一事实可能表明SQL DB结构中存在某种反模式。我猜您可能需要一个一对多关系表,例如:“选择项目。*从项目中加入项目到项目上的用户。id=项目到用户。项目到用户。项目到用户。项目到id,其中项目到用户。用户到id=”。(int)$userid;当然,我对您的数据库结构一无所知,但您应该真正了解一对多或多对多关系表。当然,like在其原始代码中不相等,
strpos
。嗨,Axel,谢谢您的回答。“发现”这一套很有魅力。我知道数据库结构很可能不理想。我不是一个真正的程序员,我只是做了一个小数据库,让我做跟踪的几个项目。看来一切都很顺利。再次感谢您的帮助,非常感谢。
$query_activeusers = "SELECT * FROM projects WHERE FIND_IN_SET('".$userid."', assignedto)"