PHP: strval in WHERE clause


PHP: strval in WHERE clause

目前我有一段代码可以正常工作。但我真正想做的是将<?php if strval ..?>部分作为WHERE条款放入"SELECT * FROM projects"部分。我不确定这是否可能或如何去做。任何想法都会受到真正的重视。希望这是有道理的。

<?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>

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

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

$query_activeusers = "SELECT * FROM projects WHERE ".$userid." IN (assignedto)";

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

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

但我认为你应该看看你的数据库设计。在这样的分隔列表中包含外键的麻烦在于,外键的全部意义在于使您能够使用索引快速找到另一个表中的信息。通过实现您拥有的数据库,您需要解决各种问题。

我不确定,但也许这会对你有所帮助。

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

现在,您可以在选择查询中使用此$where变量。 仅当您的if condition满意时,它才会执行。

如果我

正确理解您的代码,您应该使用 SQL LIKE,即:

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

此处强制转换为 (int) 是为了确保您在$userid中没有特殊的 SQL 字符 - 一种对整数值的廉价 SQL 引用。您实际上不需要使用 strval因为串联到字符串会将该数字转换为字符串。