消息:count():参数必须是在centos上实现Countable codeigniter的数组或对象

Posted

技术标签:

【中文标题】消息:count():参数必须是在centos上实现Countable codeigniter的数组或对象【英文标题】:Message: count(): Parameter must be an array or an object that implements Countable codeigniter on centos 【发布时间】:2020-08-25 12:40:19 【问题描述】:

查看我的查询

Select * from join_chat where
(user_1 = '24' and user_2 = '26') or
(user_1 = '26' and user_2 = '24')

请通过我的 api 提供解决此错误的建议

<h4>A php Error was encountered</h4>

<p>Severity: Warning</p>


</div>"responce":true,"data":"20"

2020-05-09 23:16:43.302 28439-30249/techline.carsapp W/System.err: org.json.JSONException: java.lang.String 类型的值选择无法转换为 JSONObject 2020-05-09 23:16:43.302 28439-30249/techline.carsapp W/System.err: 在 org.json.JSON.typeMismatch(JSON.java:112) 2020-05-09 23:16:43.302 28439-30249/techline.carsapp W/System.err:在 org.json.JSONObject.(JSONObject.java:163) 2020-05-09 23:16:43.302 28439-30249/techline.carsapp W/System.err:在 org.json.JSONObject.(JSONObject.java:176) 2020-05-09 23:16:43.303 28439-30249/techline.carsapp W/System.err: 在 util.CommonAsyTask.doInBackground(CommonAsyTask.java:104) 2020-05-09 23:16:43.303 28439-30249/techline.carsapp W/System.err: 在 util.CommonAsyTask.doInBackground(CommonAsyTask.java:23) 2020-05-09 23:16:43.303 28439-30249/techline.carsapp W/System.err: 在 android.os.AsyncTask$2.call(AsyncTask.java:333) 2020-05-09 23:16:43.303 28439-30249/techline.carsapp W/System.err: 在 java.util.concurrent.FutureTask.run(FutureTask.java:266) 2020-05-09 23:16:43.303 28439-30249/techline.carsapp W/System.err:在 android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:245) 2020-05-09 23:16:43.303 28439-30249/techline.carsapp W/System.err:在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) 2020-05-09 23:16:43.303 28439-30249/techline.carsapp W/System.err:在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) 2020-05-09 23:16:43.303 28439-30249/techline.carsapp W/System.err: at java.lang.Thread.run(Thread.java:764)

消息:count():参数必须是数组或者实现了Countable的对象

文件名:controllers/Api.php

行号:801

    <p>Backtrace:</p>

下面控制器中的方法

public function send_chat_data()

    $this->load->library('form_validation');
    $this->form_validation->set_rules('join_id', 'join_id', 'trim|required');
    $this->form_validation->set_rules('sender_id', 'sender_id', 'trim|required');
    $this->form_validation->set_rules('message', 'message', 'trim|required');

    if ($this->form_validation->run() == false) 
        $data["responce"] = false;
        $data["error"] = 'join id is required';
     else 
        $post_date=date("Y-m-d m:i:s");
        $send_chat = array(
                               "join_id"=>$this->input->post("join_id"),
                               "sender_id"=>$this->input->post("sender_id"),
                               "message"=>$this->input->post("message"),
                               "created_date"=>$post_date
                               );

        $this->db->insert("chat", $send_chat);
        $insertid = $this->db->insert_id();

        $q = $this->db->query("Select * from join_chat where join_id= '".$this->input->post("join_id")."' limit 1");
        $recever_id = 0;
        $row = $q->row();
        if ($row->user_1 == $this->input->post("sender_id")) 
            $recever_id = $row->user_2;
         else 
            $recever_id = $row->user_1;
        
        $q2 = $this->db->query("Select * from chat where chat_id= '".$insertid."' limit 1");


        $chat = $q2->row();
        $data["responce"] = true;
        $data["data"] = $chat;



        $q_fcm = $this->db->query("Select * from users where user_id= '".$recever_id."' limit 1");
        $row_fcm = $q_fcm->row();

        $registatoin_ids =$row_fcm->user_gcm_code;


        $message["title"] = $this->config->item('app_name');
        $message["message"] = $this->input->post("message");
        $message["image"] = "";
        $message["created_at"] = date("Y-m-d h:i:s");
        $message["obj"] = $chat;

        $this->load->helper('gcm_helper');
        $gcm = new GCM();
        //$result = $gcm->send_topics("/topics/rabbitapp",$message ,"ios");

        $result = $gcm->send_notification(array($registatoin_ids), $message, "android");
    
    echo json_encode($data);

错误来自下面的行

$row = $q->row();

【问题讨论】:

似乎您正在尝试将String 转换为JSONObject。您应该首先将字符串解析为 JSON 以获取 JSONObject。如果不查看您的代码/实现,很难判断。 需要查看你的控制器实现 我已更新问题以包含导致问题的控制器方法。请告诉我如何解决这个问题。谢谢 【参考方案1】:

我看到的问题是您正在尝试计算非数组或不可数对象。想法

    在您的整个代码中,您还没有编写count(),这似乎 导致问题,为什么? 当您限制 结果给自己 1 // as you said the problem is here $row = $q-&gt;row();

可能的解决方案 当您使用row()$q-&gt;row(); 时,您会得到non-countable object,

// row() dummy data
stdClass Object
(
    [id] => 15
    [event_id] => 3
    [event_image] => c1fa8a5d5505047251fd928aa312b16c.jpg
)

但是当你使用result()$q-&gt;result(); 时,它会产生一个对象数组,或者在result_array() 的情况下,一个数组数组,即使你将它们限制为一个。

// result() dummy data -- same as result_object()
(
    [0] => stdClass Object
        (
            [id] => 15
            [event_id] => 3
            [event_image] => c1fa8a5d5505047251fd928aa312b16c.jpg
        )

)

// result_array() dummy data
Array
(
    [0] => Array
        (
            [id] => 15
            [event_id] => 3
            [event_image] => c1fa8a5d5505047251fd928aa312b16c.jpg
        )

)

它们现在都是一个数组,因此是可数的。

因此,如果您必须计算,请使用 $q-&gt;result(); 另外,如果您想计算 计算“结果”$q-&gt;row(); 的数量,您可以使用 count((array) ($q-&gt;row())); 这将在此处返回 3。 id, event_id, event_image。阅读更多关于它的信息here

希望对你有所帮助。

【讨论】:

以上是关于消息:count():参数必须是在centos上实现Countable codeigniter的数组或对象的主要内容,如果未能解决你的问题,请参考以下文章

PHP警告消息:count():参数必须是实现Countable的数组或对象[重复]

为啥我得到错误count():参数必须是在laravel中实现Countable的数组或对象?

count():参数必须是在codeigniter中实现Countable的数组或者对象

PHP 警告:count():参数必须是在 C:\\htdocs\my.php 中实现 Countable 的数组或对象 [关闭]

在CentOS7上实现RabbitMQ群集配置

Drupal:count():参数必须是数组或者实现了Countable的对象