【问题标题】:Mysql query error limitMysql查询错误限制
【发布时间】:2017-04-30 22:09:18
【问题描述】:

我写了一个网站并使用 php。当我写

$cat = mysql_query("
Select m.Image_link AS link
     , m.Name
     , m.ID
     , c.Name AS catName
  from movie m
  join has_category mc
    on m.ID = mc.movie_id 
  join category c
    on c.ID = mc.category_id
 where c.Name = '$category'
 ORDER 
    BY ID desc"
);

这个查询一切正常,但是当我插入限制时,我出错了。

@$sayfa=$_GET['s'];

$kacar=12;
$toplansayfa=ceil(mysql_num_rows($cat)/$kacar);
$baslangic=($sayfa * $kacar) - $kacar;


$bul_cat=mysql_query("
Select m.Image_link AS link
     , m.Name
     , m.ID
     , c.Name AS catName 
  from movie m 
  join has_category Mc
    on m.ID = mc.movie_id 
  join category c
    on c.ID = mc.category_id
 where c.Name = '$category' 
ORDER 
    BY ID desc 
 limit $baslangic, $kacar
");


echo mysql_error();->

您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“-12, 12”附近使用正确的语法

我的错误在哪里..感谢您的关注。

【问题讨论】:

  • 您不能设置负限制(或偏移)。检查你的计算。但是 - 问题可能是 $sayfa 不是数字,因此转换为 0
  • 每次在新代码中使用the mysql_ 数据库扩展this happens 时,它都已被弃用,并且已经存在多年,并且在 PHP7 中永远消失了。如果您只是学习 PHP,请花精力学习 PDOmysqli 数据库扩展和预处理语句。 Start here
  • 警告:如果您只是在学习 PHP,请不要使用mysql_query 接口。它是如此可怕和危险,以至于它在 PHP 7 中被删除。像 PDO is not hard to learn 这样的替代品和像 PHP The Right Way 这样的指南解释了最佳实践。您的用户数据不是properly escaped,有SQL injection bugs,可以被利用。
  • 有人知道新学习 php/MySQL 的人在哪里找到了通往早已死去的mysql_ API 的路吗?他们不能看 php 在线手册:它充满了警告。它发生的太多了,肯定有一些主要的过时教程信息。有谁知道在哪里?我想问题的一部分是非常无能和懒惰的教授偷走了学生的未来。
  • @O.Jones 既然你问了...有很多这样的链接,例如this,它们在搜索结果中的排名很高。这很可悲,但即使是相当多的大学教科书(我以前见过)也只提供了一种在 PHP 中编写查询的方法,即使用mysql_*() 函数。

标签: php mysql


【解决方案1】:

与许多 SQL 编程错误一样,查看您尝试运行的查询的实际文本会大有帮助。

那么,试试这个:

$query = "Select movie.Image_link AS link, movie.Name, movie.ID, category.Name AS catName from (movie inner join has_category on movie.ID=has_category.movie_id inner join category on category.ID=has_category.category_id) where category.Name='$category' ORDER BY ID desc limit $baslangic, $kacar";

$bul_cat = mysql_query($query);   /*deprecated API! */
if (!$bul_cat) {
      echo "query failed: " . $query;
      echo mysql_error();   /* deprecated API! */
}

当您显示您尝试运行的实际查询时,您几乎肯定会立即发现问题。我确信 Paul Siegel 的诊断是正确的……您的查询是 LIMIT -12,12。 You Can't Do That™。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-29
    • 2010-09-14
    • 2011-02-20
    • 1970-01-01
    • 1970-01-01
    • 2015-09-22
    • 2019-12-14
    相关资源
    最近更新 更多