Php 获取数组到字符串的转换错误

Php 获取数组到字符串的转换错误,php,arrays,Php,Arrays,有人能帮我一下这个代码有什么问题吗?我正在尝试将提取的数据存储到一个数组中,我想基于该数组的值进行存储。我收到一个数组到字符串转换的错误。数组的数据类型值为string 这是密码 $sql3 ="SELECT DISTINCT subj_descr FROM subj_enrolled WHERE enroll_ref = '$ref'"; $results = mysqli_query($con, $sql3); $data

有人能帮我一下这个代码有什么问题吗?我正在尝试将提取的数据存储到一个数组中,我想基于该数组的值进行存储。我收到一个数组到字符串转换的错误。数组的数据类型值为
string

这是密码

            $sql3 ="SELECT DISTINCT subj_descr FROM subj_enrolled WHERE enroll_ref = '$ref'";
           $results = mysqli_query($con, $sql3);
           $data = array();
              while($row = mysqli_fetch_array($results)){
                      $data[] = array($row['subj_descr']);
              }


            $sql ="SELECT * FROM notification WHERE subj_descr IN ({implode(',', $data})";
           $result = mysqli_query($con, $sql);

           $count = mysqli_num_rows($result);

删除while循环中的
数组

$sql3 ="SELECT DISTINCT subj_descr FROM subj_enrolled WHERE enroll_ref = '$ref'";
       $results = mysqli_query($con, $sql3);
       $data = array();
          while($row = mysqli_fetch_array($results)){
                  $data[] = $row['subj_descr'];
          }


        $sql ="SELECT * FROM notification WHERE subj_descr IN ({implode(',', $data})";
       $result = mysqli_query($con, $sql);

       $count = mysqli_num_rows($result);

您正在创建一个
多维
数组,因此请更改此语句

$data[] = array($row['subj_descr']);

由于语句中的
SQL始终使用一维数组,所以在查询where子句中也要进行更改

我已全部更改,请尝试以下代码:

 <?php
    $sql3 ="SELECT DISTINCT subj_descr FROM subj_enrolled WHERE enroll_ref = '$ref'";
    $results = mysqli_query($con, $sql3);
    $data = array();
    while($row = mysqli_fetch_array($results)){
        $data[] = $row['subj_descr'];
    }
    $dataStr = implode(',', $data);

    $sql ="SELECT * FROM notification WHERE subj_descr IN (".$dataStr.")";
    $result = mysqli_query($con, $sql);

    $count = mysqli_num_rows($result);
    ?>

创建一个新变量并在其中内爆

试试这个

$implodeAray = implode(",", $data);
$sql ="SELECT * FROM notification WHERE subj_descr IN ($implodeAray)";

循环时,将数组的元素存储在另一个数组中

这样做:

$sql3 ='SELECT DISTINCT subj_descr 
        FROM subj_enrolled 
        WHERE enroll_ref = "$ref"';

$results = mysqli_query($con, $sql3);
$data = array();

while($row = mysqli_fetch_array($results)){
    //Your error was here
    //Each elements is escaped for security reasons
    $data[] = mysqli_escape_string($con,$row['subj_descr']);          
}

//This implodes and puts a single quote around each element
$dataIn= '\'' . implode( '\', \'', $data ) . '\'';

$sql ="SELECT * FROM notification 
       WHERE subj_descr IN ($dataIn)";

$result = mysqli_query($con, $sql);

$count = mysqli_num_rows($result);

subu descr在({infrade(',',$data})中的位置出错;只需删除while循环中的数组,其余一切都很好,正如@Insomania所建议的那样,只需从这个
数组($row['subu descr'])
中删除
数组($row['subu descr'])
;稍微解释一下就可以让他明白了。我得到了一个错误'mysqli num rows()期望参数1是mysqli_result,布尔值在`中给出,但当我将其更改为` in('计算机编程1','计算机编程2');它工作了吗?我试图将
$dataStr
放到
vardump
中,我得到了
字符串(59)“ENGLISH 2,KUMUNIKASYON,计算机编程2,数学2”的输出“
$dataStr有一个值,为什么我得到一个错误?回显此查询并直接在phpmyadmin中运行以检查确切的错误或可能是空的结果表示您的查询是错误的,因此mysqli_num_rows()期望参数1是mysqli_结果发生错误。或者与数据库中的任何记录都不匹配我得到的错误是`mysqli_num_rows()期望参数1是mysqli_result,布尔值在`中给出,但当我将其更改为` in('COMPUTER PROGRAMMING 1','COMPUTER PROGRAMMING 2'),它工作了吗?是的,如果数组中有字符串,则需要用引号('a','b','c')分隔它。在`中之前删除`并通过echo$sql显示查询。我得到了一个错误'mysqli_num_rows()期望参数1是mysqli_result,布尔值在`中给出,但当我将其更改为` in('计算机编程1','计算机编程2');它工作了吗?我试图将$dataIn放入vardump,我得到字符串(59)“ENGLISH 2,KUMUNIKASYON,COMPUTER PROGRAMMING 2,MATHEMATICS 2”的输出$dataIn有一个值,为什么我会出错?@wataru我已经更新了代码,将每个元素用一个引号括起来,但是在构建数组之前,必须在每个元素上运行mysql\u escape\u字符串,如
$data[]=mysqli\u escape\u string($con,$row['subc\u descr'])
;它是空的..但我的数据库有两条记录。您可以再次检查您的查询您可以这样重写您的查询:
$sql=“选择COUNT(*)作为sub descr IN($dataIn)”通知中的总计;
然后通过这种方式获取结果
$row=mysqli\u fetch assoc($sql);echo$row['total'];
$sql3 ='SELECT DISTINCT subj_descr 
        FROM subj_enrolled 
        WHERE enroll_ref = "$ref"';

$results = mysqli_query($con, $sql3);
$data = array();

while($row = mysqli_fetch_array($results)){
    //Your error was here
    //Each elements is escaped for security reasons
    $data[] = mysqli_escape_string($con,$row['subj_descr']);          
}

//This implodes and puts a single quote around each element
$dataIn= '\'' . implode( '\', \'', $data ) . '\'';

$sql ="SELECT * FROM notification 
       WHERE subj_descr IN ($dataIn)";

$result = mysqli_query($con, $sql);

$count = mysqli_num_rows($result);