PDO - 如果在foreach循环总是返回其他

PDO - 如果在foreach循环总是返回其他

问题描述:

我想要实现的是使页面有一个字母表,当你点击字母表中的一个字母时,你会得到值在那列数据库。PDO - 如果在foreach循环总是返回其他

一个例子,如果你不明白它。

数据库:

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"); 
        } 
       } 
      } 
+1

阅读更多关于'prepare'。 – sectus

+1

问题是** ** **看到这个[答案](http://stackoverflow.com/questions/11117134/implement-like-query-in-pdo/11117213#11117213) –

Quick bugfix。

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"); 
     } 
} 
+0

还有什么其他的方式没有使用的foreach。 – Efekan

+0

@AzaZPPL,更新已添加。 – sectus