【问题标题】:MYSQL OR not workingMYSQL 或不工作
【发布时间】:2017-07-01 09:19:49
【问题描述】:

我有一个代码,其中OR 不起作用

try {
  $keyword = trim($_GET["keyword"]);
  if ($keyword <> "" ) {
    $sql = "SELECT * FROM tbl_contacts WHERE 1 AND "
            . " (first_name OR last_name LIKE :keyword) ORDER BY first_name ";
    $stmt = $DB->prepare($sql);

    $stmt->bindValue(":keyword", $keyword."%");

它只从last_name 搜索,而不从first_name 搜索。

我需要它同时搜索 last_namefirst_name

【问题讨论】:

  • (first_name LIKE :keyword1 OR last_name LIKE :keyword2) 不是很明显吗?

标签: php mysql


【解决方案1】:

正确的代码是:

$sql = "SELECT * FROM tbl_contacts WHERE 1 AND "
        . " (first_name LIKE :keyword1 OR last_name LIKE :keyword2) ORDER BY first_name ";
$stmt = $DB->prepare($sql);
$stmt->bindValue(":keyword1", $keyword."%");
$stmt->bindValue(":keyword2", $keyword."%");

注意,您不能拥有多个同名占位符。这就是我使用keyword1keyword2 并将相同的值绑定到它们的原因。

【讨论】:

  • keyword1 和keyword2 值应使用单引号
  • @TSungur 为什么?
  • 因为它将是一个字符串值并且sql字符串用引号括起来?
  • “琼恩·雪诺你什么都不知道”
  • 对不起我的错误
【解决方案2】:

试试这个

$sql = "SELECT * FROM tbl_contacts WHERE 1 AND "
        . " (first_name LIKE :keyword OR last_name LIKE :keyword) ORDER BY first_name ";

【讨论】:

    【解决方案3】:

    这次你加倍努力,尝试了更多,是的,这比MYSQL search result更清楚。

    try {
      $keyword = trim($_GET["keyword"]);
      if ($keyword <> "" ) {
        $sql = "SELECT * FROM tbl_contacts WHERE 1 AND "
            . " (first_name LIKE :keyword OR last_name LIKE :keyword) ORDER BY first_name ";
        $stmt = $DB->prepare($sql);
    
        $stmt->bindValue(":keyword", $keyword."%");
    

    希望对你有所帮助。

    是的,请尝试编辑相同的问题,避免以不同的方式提出相同的问题。

    我也回答了这个问题https://stackoverflow.com/a/44859438/7678788

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-10
    • 2014-10-23
    • 2010-11-10
    • 2015-03-24
    • 2014-03-29
    相关资源
    最近更新 更多