【问题标题】:Medoo Limit not workingMedoo 限制不起作用
【发布时间】:2018-05-04 01:25:15
【问题描述】:

我遇到了一个意想不到的问题

<?php
    header("Access-Control-Allow-Origin: *");
    include_once("Medoo.php");
    use Medoo\Medoo;

    $db = new Medoo([
        'database_type' => 'mysql',
        'database_name' => '************',
        'server' => 'localhost',
        'username' => '************',
        'password' => '************'
    ]);

    function getThreads($db, $start, $limit){
        $data = $db->select('threads', ['id', 'title', 'content', 'date', 'userid'],  ["AND" => ["active" => "1", "limit" => [$start, $limit]]]);
        return $data;
    }

    function utf8ize($d) {
        if (is_array($d)) {
            foreach ($d as $k => $v) {
                $d[$k] = utf8ize($v);
            }
        } 
        else if (is_string ($d)) {
            return utf8_encode($d);
        }
        return $d;
    }

    $start=htmlspecialchars(trim($_POST['start']));
    $limit=htmlspecialchars(trim($_POST['limit']));

    $query = getThreads($db, $start, $limit);
    if($query == false) {
        echo json_encode(array("code" => "failed"));
    } 
    else {
        echo json_encode(utf8ize($query));
    }
?>

如果我通过 ajax 使用参数 start 0 和 limit 5 调用 php 文件,我总是从 console.log();结果。已经尝试过 medoo 的 debug() 函数,但 sql 查询看起来不错。没有限制一切正常...有什么想法或建议吗?有人可以帮忙吗?

var start = 0;
var limit = 5;
$.ajax({
    type: "POST",
    url: 'http://*********/****/********.php',
    crossDomain: true,
    dataType: "text json",
    data: "&start="+start+"&limit="+limit,
    success: function (data) {
        console.log(data);
        if(data.code == "failed"){

        } else {
            start += limit;
            data.reverse();
            $('#threads').html("");
            for (var i = 0; i < data.length; i++) {
                if(data[i]['userid'] == localStorage.id){
                    $('#threads').append("<ons-card onclick='pushpc("+data[i]["id"]+","+data[i]["userid"]+");'><div id='threadid'>"+data[i]["id"]+"</div><div class='title'>"+decode_utf8(data[i]["title"])+"</div><div class='content'>"+decode_utf8(data[i]["content"])+"</div></ons-card>");
                } else {
                $('#threads').append("<ons-card onclick='pushpc("+data[i]["id"]+","+data[i]["userid"]+");'><div id='threadid'>"+data[i]["id"]+"</div><div class='title'>"+decode_utf8(data[i]["title"])+"</div><div class='content'>"+decode_utf8(data[i]["content"])+"</div></ons-card>");
            }
            }
        }
    }
});

【问题讨论】:

  • 我对 Medoo 一无所知,但是 "limit" 元素在 $db-&gt;select() 的第三个参数中的位置对我来说似乎有点奇怪。不应该是["AND" =&gt; ["active" =&gt; "1"], "limit" =&gt; [$start, $limit]] 之类的东西吗?换句话说,limit 子句与where 子句项目如AND? (或者也许它甚至应该在一个完整的单独参数中传递给$db-&gt;select()?)
  • ["AND" =&gt; ["active" =&gt; "1"], "limit" =&gt; [$start, $limit]] 返回所有数据库条目,sql 查询如下所示:SELECT "id","title","content","date","userid" FROM "threads" WHERE "active" = '1'

标签: php medoo


【解决方案1】:

应该是

   function getThreads($db, $start, $limit){
    $data = $db->select('threads', ['id', 'title', 'content', 'date', 'userid'],  ["active" => "1", "LIMIT" => [$start, $limit]]);
    return $data;
   }

在medoo中LIMIT不是条件,不用“AND”也可以使用

【讨论】:

    【解决方案2】:

    我解决了:

      $data = $db->query("SELECT id, title, content, date, userid FROM threads LIMIT ".$start.", ".$limit."")->fetchAll();
    

    【讨论】:

      猜你喜欢
      • 2011-02-10
      • 2014-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-24
      • 2018-09-14
      • 2013-02-07
      • 1970-01-01
      相关资源
      最近更新 更多