使用php中的implode变量选择查询的麻烦?

时间:2015-06-20 10:04:39

标签: php

我不知道它是否重复?

以下是我正在尝试的内容:

 <?php
    session_start();
    include('db.php');
     $valid_data=$_POST['data'];
     if(isset($_POST['data']))
    {
     $list = isset($_SESSION['strtpnt1']) ? $_SESSION['strtpnt1'] : array();
     $_SESSION['strtpnt1'][] =$valid_data;
     $a=implode(',',$_SESSION['strtpnt1']);
    }
  ?>

当我使用print_r进行$ _SESSION [&#39; strtpnt1&#39;]我可以这样看:

     array (size=5)
     0 => string 'trivandrum' (length=10)
     1 => string 'kochi' (length=5)
     2 => string 'nagercoil' (length=9)
     3 => string 'thrissur' (length=8)

我发现

没有错

当我回应内爆变量时,我发现这样的值:

      trivandrum,kochi,nagercoil,thrissur

当我在wampserver phpmyadmin这样的sql中测试内爆数据时,我会收到一条错误消息:

  select start from tbl_place where start NOT IN(trivandrum,kochi,nagercoil,thrissur)   

错误信息是:

        Unknown column 'trivandrum' in 'where clause'

但是当字符串值传递时,查询就会起作用,即&#39; trivandrum&#39;&#39; kochi&#39;等

我不知道我的查询有什么问题......这是查询部分

  $sql21 = "select start from tbl_place where start NOT IN('".$a."')";

3 个答案:

答案 0 :(得分:0)

您的参数$a值存在错误,IN()内的所有值都应引用并以逗号分隔。

更改您的代码如下:

$a=implode("','",$_SESSION['strtpnt1']); // ',' => "','"

$sql21 = "select start from tbl_place where start NOT IN('".$a."');";// no change

// NOW the SQL query will became:  select start from tbl_place where start NOT IN('trivandrum','kochi','nagercoil','thrissur');

现在应该可以了。

答案 1 :(得分:0)

现在你可以尝试这个,但准备好的声明是最好的。您可以使用PDO或MYSQLi。它不适合你,因为NOT IN需要单独引用列表并用逗号分隔。

  $a=$_SESSION['strtpnt1'];
  $new_a= "'" . implode("','", $a) . "'";
  $sql21 = "select start from tbl_place where 
 start NOT IN($new_a)";

类似的想法 :Can I bind an array to an IN() condition?

Proper format for PDO and MySQL IN/NOT IN queries

答案 2 :(得分:0)

$ sql21 =“从tbl_place开始选择从哪里开始NOT IN('”。$ a。“')”;

会像这样查询:

$ sql21 =“从tbl_place开始选择从哪里开始NOT IN('trivandrum,kochi,nagercoil,thrissur')”;

将整个字符串视为

你必须做传递变量 $ A =破灭( “ ''”,$ _ SESSION [ 'strtpnt1']);