【问题标题】:Check if value exists In MySQL row检查值是否存在于 MySQL 行中
【发布时间】:2011-06-16 19:34:45
【问题描述】:

我有一个 php 变量:$foo

我的名为data 的 MySQL 表具有以下结构:

id    var    header

1     zj3     http://google.com

我想检查$foo 是否在var 行中准备就绪。

如果是,我想回显header ("http://google.com")

你会如何处理这个问题?

提前谢谢,如果需要任何澄清,请询问!

【问题讨论】:

  • 那么,如果表中没有值,您想返回一行吗?我很困惑。
  • @Rocket 抱歉有大错字!!编辑了我的问题。
  • 谢谢。现在说得通了:-P

标签: php mysql database select row


【解决方案1】:

您的查询应该是:

SELECT `header` FROM `data` WHERE `var` = '$foo'

这将返回 var 值为 $foo 的所有标头。

$db = mysqli_connect('localhost', 'username', 'password', 'database');
if($query = mysqli_query($db, "SELECT `header` FROM `data` WHERE `var` = '$foo'")){
  while($row = mysqli_fetch_assoc($query)){
    echo $row['header'];
  }
  mysqli_free_result($query);
}

【讨论】:

  • 那么如果我将它与空进行比较,我会知道该值是否存在?如果没有找到任何值,它会返回什么?
  • 如果它没有找到任何东西,它不会返回任何东西($query 将是FALSE)。
  • @Trufa:'所以如果我将它与空值进行比较,我会知道该值是否存在'是什么意思?
  • 我收到 Parse error: syntax error, unexpected '{' in /home/xxx/public_html/xxx.com/index.php on line 11
  • 在第一行的{ 之前添加另一个)
【解决方案2】:

首先连接到数据库

$query = mysql_query("SELECT var, header FROM data WHERE id='1'") or die(mysql_error());
while($row = mysql_fetch_assoc($query)){
    if($foo == $row['var']){
        echo $row['header'];
    }
}

编辑:根据您的编辑更改相等性声明

【讨论】:

  • 这个有道理,我试试看,感谢快速回复!
  • 它说:“未选择数据库”为什么会这样?
  • @Trufa:您需要确保首先使用mysql_connect 连接到数据库。
【解决方案3】:

一点都不难,如果我理解正确的话,这应该对你有帮助。

// Query Variable / Contains you database query information
$results = $query;

// Loop through like so if the results are returned as an array
foreach($results as $result)
{
    if(!$result['var'])
        echo $result['header'];
}

// Loop through like so if the results are returned as an object
foreach($results as $result)
{
    if(!$result->var)
        echo $result->header;
}

【讨论】:

    【解决方案4】:

    您是在询问$foo 是否与data 中的任何 字段匹配,或者$foo=some_field 是否匹配?如果你想要$foo==var,请点击这里。

    $foo='somevalue';
    $query="SELECT id, var, header FROM `data` WHERE var='$foo'";
    $result=mysqli_query($query);
    if($result->num_rows==0) 
      $loc= 'http://google.com';//default value for when there is no row that matches $foo
    }else{
      $row=$result->fetch_assoc(); //more than one row is useless since the first header('Location: x') command sends the browser to a new page and away from your script.
      $loc=$row['header'];
    
    }
    header ("Location: $loc);
    exit;
    

    ETA:由于您已经编辑了问题,如果您的搜索值与您的 var 列匹配,您似乎想要回显标题列。以上不适用于此。

    【讨论】:

    • 是的,这是正确的,如果您的搜索值与您的 var 列匹配,我想回显标题列。
    【解决方案5】:

    您只想知道 $var 的值是否在该列中的任何位置(任何行)?

    SELECT COUNT(id) FROM data WHERE var = ?;
    

    结果将是字段 var 包含 $var 值的行数。

    【讨论】:

      【解决方案6】:

      这是所有“是否存在”问题的模板。

      这是迄今为止唯一真正对我有用且未被弃用的东西。

      if ($query = mysqli_query($link, "SELECT header FROM data WHERE var = '$foo'")) {
      
              $header = mysqli_fetch_assoc($query);
      
              if ($header) {
      
                  // The variable with value $foo exists.
              }
              else {
      
                  // The variable with value $foo doesn't exist.
              }
          }
          else {
      
              // The query didn't execute for some reason. (Dammit Obama!)
          }
      

      警告!

      即使变量 不存在$querymysqli_query() 之间的比较也将始终返回 TRUE.

      发生在我身上的比较返回 FALSE 的唯一方法是因为您的查询中存在语法错误。

      我不知道为什么它对编写已接受答案的人有用,也许是更新,或者他有语法错误并且非常自信以至于他没有检查它是否可能是 TRUE

      这是有人为纠正他的语法而发表的评论:

      “在第一行的 { 之前添加另一个 )”

      所以,接受的答案是错误的!

      【讨论】:

        猜你喜欢
        • 2014-04-10
        • 2023-03-24
        • 2020-03-22
        • 2016-12-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-06-10
        • 2012-07-02
        相关资源
        最近更新 更多