简体   繁体   中英

Mysql SELECT WHERE id = ? AND url = 1, 0 or all

I have a system in which show messages, but the user has the option to see positive (1) and negative (0) messages, but also has a link where you can see all messages (1 and 0) and I can do this query?

index.php?id=1&url=1

<?php 
function mesage($id, $url) {
$db = DB::getInstance();
$query = $db->query("SELECT * FROM mesage WHERE id = ? AND url = ?", array($id, $url));
$results = $query->results();
return ($results);
}

$url = isset($_GET["url"])?$_GET["url"]:'Select 0 and 1';
$id = $_GET['id'];
$getmesaje = mesage($id, $url);
?>

As I can change the word " Select 0 and 1 " in the variable " $url " to show all?

You can use

index.php?id=1&url=1 // for positive

index.php?id=1&url=0 // for negative

index.php?id=1 // for all

<?php 
function mesage($id, $url) {
    $db = DB::getInstance();
    if(empty($url)) {
        $query = $db->query("SELECT * FROM mesage WHERE id = ?",$id);
    } else {
        $query = $db->query("SELECT * FROM mesage WHERE id = ? AND url = ?", array($id, $url));
    }
    $results = $query->results();
    return ($results);
}

$url = isset($_GET["url"])?$_GET["url"]:'';
$id = $_GET['id'];
$getmesaje = mesage($id, $url);
?>

Prepare dynamic query depends upon user input . and use IN in where clause.

<?php 
        function mesage($id, $url) {

         $concatenate='';

         if(!empty($url))
         {

             $concatenate.= "  AND url IN(?)";

             $param = array($id, $url);
         }
         else
         {
            $param = array($id);

         }

        $db = DB::getInstance();
        $query = $db->query("SELECT * FROM mesage WHERE id = ? $concatenate ",$param );
        $results = $query->results();
        return ($results);
        }

        $url = isset($_GET["url"])?$_GET["url"]:'';
        $id = $_GET['id'];

        if(!empty($id))
        {
           $getmesaje = mesage($id, $url);
        }
    ?>

UPDATE 1 : As per comment your correct when $url comes with 0 values it consider as empty . so it should be if(strlen($url)>0){} like this .

<?php 
    function mesage($id, $url) {

     $concatenate='';

     if(strlen($id)>0)
     {

         $concatenate.= "  AND url IN(?)";

         $param = array($id, $url);
     }
     else
     {
        $param = array($id);

     }

    $db = DB::getInstance();
    $query = $db->query("SELECT * FROM mesage WHERE id = ? $concatenate ",$param );
    $results = $query->results();
    return ($results);
    }

    $url = isset($_GET["url"])?$_GET["url"]:'';
    $id = $_GET['id'];

    if(strlen($id)>0)
    {
       $getmesaje = mesage($id, $url);
    }
?>

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM