我有一个基于多项选择的查询。例如,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);
答案 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);
}
}
}