MYSQL-如果字符串为空,请勿添加查询

时间:2019-11-06 07:17:26

标签: mysql

我有一个基于多项选择的查询。例如,game_name是一个字符串,如果用户选择,则可以为空。如果输入为“”,有什么办法不用搜索游戏名称?

 $stmt = $connection->prepare("SELECT * FROM $config->tablename WHERE id = ? OR game_name = ? OR gamer_tag = ? LIMIT ?");
 $stmt->bind_param("ssss", $request->id, $request->game_name, $request->gamer_tag, $request->limit);

2 个答案:

答案 0 :(得分:1)

您应该采取一些变通办法来控制它,并且当用户希望该字段为空时,您应该对此进行控制并添加以查询如下内容:

转换此

game_name = ?

进入此

game_name = ? OR game_name = game_name

因此对于该字段,这始终是正确的。

编辑: 结合@Amado的解决方案和我的建议,可以用更少的IF语句(仅是我的POV)解决问题。

$MyWhere = "id = ? OR gamer_tag = ? OR game_name = ?"
if(game_name !="") $MyWhere = $MyWhere." OR game_name = game_name";
$stmt = $connection->prepare("SELECT * FROM $config->tablename WHERE ".$MyWhere." LIMIT ?");
$stmt->bind_param("ssss", $request->id, $request->gamer_tag, $request->game_name, $request->limit);

答案 1 :(得分:1)

您可以在执行查询之前添加一些检查:

package main

import (
    "flag"
    "fmt"
    "os"
)

func main() {
    initCmd := flag.NewFlagSet("init", flag.ExitOnError)
    initSiteName := initCmd.String("site", "", "Main name for your site")
    flag.Parse()
    for pos, cmd := range os.Args {
        switch cmd {
        case "debug":
            fmt.Printf("debug\n")
        case "init":
            initCmd.Parse(os.Args[pos+1:])
            fmt.Printf("init\n  site name:%v\n", *initSiteName)
        default:
            fmt.Printf("Filename: %v\n", cmd);
        }
    }
}