如果设置了所有值,则插入mysql查询

时间:2014-01-18 11:02:47

标签: php mysql sql

以下是我的SQL查询:

$result = mysqli_query($con,"SELECT url,img_url,sentiment,title,category from invite_page where category='".$category."' where today = '".$today."' order by rt_count desc limit 3 ");
while ($row = @mysqli_fetch_array($result))
{
    $url = $row['url'];
    $img_url = $row['img_url'];
    ...
}

我正在某些显示框中向用户显示此获取的值。

  1. 问题出在几行中titleimg_url字段在数据库中为空。我想只获取填充所有字段的记录。怎么做到这个?

  2. 如果today = '".$today."'没有3条记录,那么它应该以今天的desc顺序记录。 (rt_count的desc顺序也应该保持。我想显示从最大值到最低值的记录)

  3. 怎么做?

2 个答案:

答案 0 :(得分:2)

  1. 将这些字段的检查添加到WHERE子句。
  2. today支票从=更改为<=,并将其添加到ORDER BY条款中。

  3. SELECT url,img_url,sentiment,title,category 
    FROM invite_page
    WHERE category='".$category."' 
      AND today <= '".$today."' 
      AND title != ''
      AND img_url != ''
    ORDER BY today DESC, rt_count DESC
    LIMIT 3 
    

答案 1 :(得分:2)

您应该停止使用数据库扩展,就像旧的,已弃用的旧mysql扩展名一样。这是不安全的,因为它允许sql注入。使用较新的mysqli扩展名或pdo结合已解决这些问题的预处理语句。从这个查询'prototype'开始:

SELECT url,img_url,sentiment,title,category 
  FROM invite_page 
  WHERE category = :category AND today <= :today
    AND title IS NOT NULL AND img_url IS NOT NULL
  ORDER BY rt_count desc, rt_count desc 
  LIMIT 3

是否必须像上面示例中那样检查title IS NOT NULLtitle!=''取决于您的数据库设置,如果这些列为NULL或保留空字符串作为内容。

接下来''将'参数'绑定'到执行前的语句(确切的语法取决于你使用的扩展名,google上有数以百万计的例子:

$db->bind('category', $category);
$db->bind('today', $today);

接下来,执行预准备语句。

请注意,这不是开箱即用的,它意味着指向正确的方向。你肯定已经阅读了一些文档并研究了你在互联网上找到的一些例子。