【问题标题】:PDO - If in foreach loop always returns too elsePDO - 如果在 foreach 循环中总是返​​回,否则
【发布时间】:2013-11-12 03:47:39
【问题描述】:

我想要实现的是制作一个有字母表的页面,当您单击字母表中的一个字母时,您将获得数据库中列中的值。

如果你不明白,举个例子。

数据库:

John
Jason
Jos
Jan
Marco
Bott

所以我点击字母表中的一个字母:

<a href="?tag=J">J</a>

这应该给我所有以 J 开头的用户。

这是我的代码,它不起作用(它总是返回)。

            if(isset($_GET['tag'])){
                $tag = $_GET['tag'];
                $check = range('A', 'Z');
                foreach($check as $row){
                    if($tag == $row){
                        $query = $pdo->prepare("SELECT names FROM users WHERE UPPER(names) LIKE '{$row}%'");
                    } else {
                        $query = $pdo->prepare("SELECT names FROM users");
                    }
                }
            }

【问题讨论】:

  • 阅读更多关于prepare的信息。
  • 问题在于 LIKE 看到这个ANSWER

标签: php mysql sql pdo


【解决方案1】:

快速修正错误。

if(isset($_GET['tag'])){
    $tag = $_GET['tag'];
    $check = range('A', 'Z');
    // default query
    $query = $pdo->prepare("SELECT names FROM users");
    foreach($check as $row){
        if($tag == $row){
            $query = $pdo->prepare("SELECT names FROM users WHERE UPPER(names) LIKE '{$row}%'");
            // do not check other
            break; 
        } 
    }
}

但这是错误的方式。你不需要foreach

if(isset($_GET['tag'])){
    $tag = $_GET['tag'];
    if (preg_match('/^[A-Z]/', $tag, $matches)){
            $query = $pdo->prepare("SELECT names FROM users WHERE UPPER(names) LIKE '{$matches[0]}%'");
        } else {
            $query = $pdo->prepare("SELECT names FROM users");
        }
}

【讨论】:

  • 不使用foreach还有什么办法。
猜你喜欢
  • 2015-07-23
  • 1970-01-01
  • 1970-01-01
  • 2017-03-10
  • 2012-01-26
  • 2015-12-27
  • 2018-09-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多