Php 不同和<&燃气轮机;从SQL查询问题

Php 不同和<&燃气轮机;从SQL查询问题,php,mysql,Php,Mysql,我从数组中获取一些值,并在SQL查询中与这些值进行匹配 其代码如下: foreach($files as $ex){ $search = substr($ex,3,4); echo $search . '<br>'; echo '<br>'; $sql = 'SELECT DISTINCT `pdb_code` FROM pdb WHERE `pdb_code` <> "' . $search . '" LIMIT

我从数组中获取一些值,并在SQL查询中与这些值进行匹配

其代码如下:

foreach($files as $ex){

      $search = substr($ex,3,4);
      echo $search . '<br>';
      echo '<br>';

  $sql = 'SELECT DISTINCT `pdb_code` FROM pdb WHERE `pdb_code` <> "' . $search . '" LIMIT 4';
  } 
  $result = mysql_query($sql) or die(mysql_error());

  while($row = mysql_fetch_array($result)){
    echo 'SQL' . $row['pdb_code'] .'<br>';
    $pdb[] = $row['pdb_code'];
  } 
查询的SQL输出仍然是:

101m

102l

102m

103l

您必须在以下情况下使用not:

SELECT * FROM table_name WHERE column_name NOT IN(value1, value2...)
试试这个:

$searchIds = implode(',',$search);
$sql = "SELECT DISTINCT `pdb_code` FROM pdb WHERE `pdb_code` NOT IN ('$searchIds') LIMIT 4";

您的代码似乎没有那么合乎逻辑,因为您生成了许多SQL语句,然后只执行最后一条

但是,我假设您要做的是获取一个文件列表,从每个文件名中提取一个字符串,然后从表中列出所有不在字符串中的pdb_代码值

如果是这样的话,像这样的事情就行了。它接受每个文件名,提取子字符串并转义,将结果放入数组中。然后它构建一个查询,内爆数组以在NOT in子句中使用:-

<?php 

$search_array = array();

foreach($files as $ex)
{
    $search = substr($ex,3,4);
    echo $search . '<br>';
    echo '<br>';
    $search_array[] = mysql_real_escape_string($search);
} 

if (count($search_array) > 0)
{
    $sql = "SELECT DISTINCT `pdb_code` FROM pdb WHERE `pdb_code` NOT IN ('" . implode("','", $search_array) . "') LIMIT 4";
    $result = mysql_query($sql) or die(mysql_error());

    while($row = mysql_fetch_array($result))
    {
        echo 'SQL' . $row['pdb_code'] .'<br>';
        $pdb[] = $row['pdb_code'];
    } 
}

在不知道输入的情况下很难判断发生了什么(比如$files),但似乎您正在为$files中的每个元素构建一个SQL查询,但是您只执行最后一个。考虑$search的输出:101m 102l 102MH他还需要将所有搜索字符串连接到
$search
。它的意思是
警告:join():传入的参数无效
<?php 

$search_array = array();

foreach($files as $ex)
{
    $search = substr($ex,3,4);
    echo $search . '<br>';
    echo '<br>';
    $search_array[] = mysql_real_escape_string($search);
} 

if (count($search_array) > 0)
{
    $sql = "SELECT DISTINCT `pdb_code` FROM pdb WHERE `pdb_code` NOT IN ('" . implode("','", $search_array) . "') LIMIT 4";
    $result = mysql_query($sql) or die(mysql_error());

    while($row = mysql_fetch_array($result))
    {
        echo 'SQL' . $row['pdb_code'] .'<br>';
        $pdb[] = $row['pdb_code'];
    } 
}